【问题标题】:WSGI post-process cleanupWSGI 后处理清理
【发布时间】:2012-08-03 19:18:51
【问题描述】:

我正在运行一个带有 mod_wsgi 和 apache 的 TurboGears 应用程序,使用用 Ming 包裹的 pymongo 来实现持久性。为了防故障和扩展我的应用程序,我有兴趣通过 pymongo ReplicaSetConnection 使用 mongo 对副本集的支持。

但是,正如上面链接中所指定的,在处理完每个 pymongo ReplicaSetConnection 对象后,必须调用 close(),否则会留下一堆僵尸进程(wtf pymongo)。 Ming 不太支持这种行为(它实际上还没有真正支持 Replica Sets),但我设法编写了一个清理函数来关闭所有 pymongo 连接。

现在我想对我的所有应用进程的进程清理运行我的清理功能。它们有两个基本入口点:通过 apache 和 paste 命令的 mod_wsgi。将我的清理添加到 paste 命令中是没有问题的,但是有没有办法为 wsgi 进程指定清理功能?

如果没有,还有其他正确设置的建议吗?

【问题讨论】:

    标签: python-2.7 replication mod-wsgi pymongo ming


    【解决方案1】:

    TurboGears 本身也提供 shutdown 钩子,可以使用 config/app_cfg.py 中的 base_config.register_hook 进行注册。

    只要进程存在,就会调用关闭挂钩

    【讨论】:

      【解决方案2】:

      您无法保证您的代码甚至会被调用,因为进程可能会在调用之前崩溃或被强制退出。有了这个警告,请阅读有关此特定问题的 mod_wsgi 文档:

      http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode

      【讨论】:

      • 我相信这应该足够了。当我不关闭会话时,我的进程挂起,所以我假设提到的“后台任务”在主进程中。当我运行一些测试时,我会在这里确认这一点。
      • 清理函数将在您调用 atexit.register() 的每个 WSGI 进程中调用。
      • WSGI 本身没有标准的东西吗?
      • 在标准中特别针对什么?该文档中介绍了发布请求清理。对于关闭时的进程范围清理,不,WSGI 规范没有任何内容。
      猜你喜欢
      • 2017-03-09
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2019-10-18
      相关资源
      最近更新 更多