2012-08-06 108 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