2012-08-06 2 views
0

저는 mod_wsgi와 아파치로 TurboGears 앱을 실행하고 있습니다. pymongo를 사용하여 지속성을 위해 Ming으로 래핑했습니다. 실수로 응용 프로그램을 확장하려면 mongo가 pymongo ReplicaSetConnection을 통해 복제 세트를 지원하는 데 관심이있었습니다.WSGI 포스트 프로세스 클린업

그러나 위의 링크에서 지정된대로 모든 pymongo ReplicaSetConnection 개체를 완료하면 close()을 호출해야합니다. 그렇지 않으면 좀비 프로세스가 (wtf pymongo) 주위에 떠있게됩니다. 이런 종류의 동작은 Ming에서 아주 잘 지원되지는 않지만 (실제로 복제 세트를 아직 지원하지는 않습니다) 모든 pymongo 연결을 닫는 정리 기능을 작성했습니다.

이제 모든 내 앱 프로세스의 정리 정리에서 내 정리 기능을 실행하고 싶습니다. 여기에는 mod_wsgi에서 apache 및 paster 명령이라는 두 가지 기본 항목이 있습니다. paster 명령에 내 정리를 추가하는 것은 문제가되지 않지만 wsgi 프로세스에 대한 정리 기능을 지정하는 방법이 있습니까?

그렇지 않으면 올바르게 설정하기위한 다른 조언이 필요합니까?

답변

0

프로세스를 호출하기 전에 프로세스가 충돌하거나 강제 종료 될 수 있으므로 코드가 호출되는 것을 보장 할 수는 없습니다. 이주의해야 할 점으로,이 특정 문제에 대한 mod_wsgi에 설명서를 읽어

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

+0

나는 이것이 충분해야한다고 생각합니다. 세션을 닫지 않으면 프로세스가 멈추어 서 언급 한 "백그라운드 작업"이 주 프로세스에 있다고 가정합니다. 몇 가지 검사를 할 때 여기에서 확인하겠습니다. – Will

+0

정리 기능은 atexit.register()를 호출하는 각 WSGI 프로세스에서 호출됩니다. –

+0

거기에 WSGI 자체에 뭔가 표준이 없습니까? –

0

TurboGears 자체도 설정/app_cfg.py 내부 base_config.register_hook 사용하여 등록 할 수 있습니다 종료 훅을 제공합니다.

프로세스가 존재할 때마다 시스템 종료 훅이 호출됩니다.