我正在使用 python 信号库来终止一个运行时间超过设定时间的函数。
它在我的测试中运行良好,但是当托管在服务器上时,我收到以下错误
“信号仅在主线程中起作用”
我已在 httpd.conf 中将 WSGI 信号限制设置为关闭
WSGIRestrict信号关闭
如上所述 http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Registration_Of_Signal_Handlers
我正在使用此处描述的配方中的功能 http://code.activestate.com/recipes/307871/
不知道我做错了什么。有没有办法确保信号在主线程中被调用?
最佳答案
Apache/mod_wsgi 下的任何代码作为主线程运行的唯一时间是通过 WSGIImportScript 或等效方法导入 WSGI 脚本文件时。尽管可以使用该方法从主线程注册信号处理程序,但它没有任何用处,因为所有后续请求都是通过辅助线程而不是主线程提供服务的。因此,我认为你的信号处理程序永远不会运行,因为记住它只能在主线程实际上正在做某事时运行,而情况并非如此,因为主线程将在 Apache/mod_wsgi 中被阻塞只需等待进程关闭即可。
您想要终止的操作正在执行什么操作?在 Web 应用程序的上下文中执行此操作,特别是如果 Web 应用程序是多线程的,可能不是一个好主意。
关于WSGI 上托管的 Python 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3208577/