0

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

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

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

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

4

2 回答 2

0

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

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

于 2012-08-06T20:08:32.167 回答
0

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

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

于 2012-09-22T18:07:25.057 回答