2012-08-06 83 views
0

我正在使用mod_wsgi和apache运行TurboGears应用程序,使用pymongo包装在Ming中进行持久化。为了失败并扩展我的应用程序,我有兴趣通过pymongo ReplicaSetConnection使用mongo对副本集的支持。WSGI后期处理清理

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

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

如果不是,任何其他建议正确设置它?

回答

0

你不能保证你的代码甚至会被调用,因为进程只能在调用之前崩溃或被强制退出。做了这番解释,阅读文档的mod_wsgi关于这个具体问题:

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

+0

我相信这应该足够了。当我没有关闭会话时,我的进程挂起,所以我假设提到的“后台任务”在主进程中。当我运行一些测试时,我会在此确认。 – Will 2012-08-06 20:48:47

+0

将在每个调用atexit.register()的WSGI进程中调用清理函数。 – 2012-08-07 11:08:48

+0

WSGI本身没有标准的东西吗? – 2014-10-22 16:28:47

0

的TurboGears本身也提供了可以使用base_config.register_hook配置/ app_cfg.py内注册的关机挂钩。

每当进程存在时,都会调用shutdown hook