在WSGI上托管的Python信号

1 投票
1 回答
802 浏览
提问于 2025-04-16 01:01

我正在使用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中会被阻塞,只是在等待进程关闭。

你想要终止的操作是什么?在网络应用程序的上下文中,特别是如果这个应用程序是多线程的,可能这样做并不是个好主意。

撰写回答