WSGI post-process cleanup

放肆的年华 提交于 2019-12-13 05:59:19

问题


I'm running a TurboGears app with mod_wsgi and apache, using pymongo wrapped with Ming for persistence. To failproof and scale my app I was interested in using mongo's support for replica sets through a pymongo ReplicaSetConnection.

However, as specified in the above links, one must call close() when done with every pymongo ReplicaSetConnection object, otherwise it will leave a bunch of zombie processes floating around (wtf pymongo). This sort of behavior isn't supported very well in Ming (it actually doesn't really support Replica Sets yet), but I managed to write a cleanup function that closes all pymongo connections.

Now I want to run my cleanup function on process cleanup for all my app processes. These have two basic entry points: mod_wsgi through apache and paster commands. It is no problem to add my cleanup to the paster commands, but is there a way to specify a cleanup function for wsgi processes?

If not, any other advice for setting this up correctly?


回答1:


You have no guarantee your code will even be called as processes can just crash or be forcibly exited before it is called. With that caveat, read the mod_wsgi documentation about this specific issue:

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




回答2:


TurboGears itself also provides the shutdown hook which can be registered using base_config.register_hook inside config/app_cfg.py.

The shutdown hook gets called whenever the process exists



来源:https://stackoverflow.com/questions/11834730/wsgi-post-process-cleanup

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!