在WSGI上托管的Python信号
我正在使用Python的信号库来终止一个运行时间超过设定时间的函数。
在我的测试中,这个方法效果很好,但当我把它放到服务器上时,出现了以下错误:
“信号只能在主线程中使用”
我在httpd.conf文件中把WSGI信号限制设置为关闭:
WSGIRestrictSignal Off
具体的设置方法可以参考这个链接: http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Registration_Of_Signal_Handlers
我使用的函数是这里描述的: http://code.activestate.com/recipes/307871/
我不太确定自己哪里做错了。有没有办法确保信号在主线程中被调用?
1 个回答
1
在Apache/mod_wsgi环境下,只有当通过WSGIImportScript或类似的方法导入WSGI脚本文件时,代码才会在主线程中运行。虽然你可以用这种方法在主线程中注册信号处理器,但这没什么用,因为后续的请求都是通过其他线程来处理的,而不是主线程。因此,我觉得你的信号处理器可能永远不会运行,因为它只能在主线程实际执行某些操作时才会运行,而主线程在Apache/mod_wsgi中会被阻塞,只是在等待进程关闭。
你想要终止的操作是什么?在网络应用程序的上下文中,特别是如果这个应用程序是多线程的,可能这样做并不是个好主意。