WSGI 上托管的 Python 信号

标签 python signals mod-wsgi

我正在使用 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/

相关文章:

python - 我的 Apache 站点的配置文件中的命令 'WSGIReloadMechanism' 无效

django - 在 Apache 上使用 Django 和 mod_wsgi 的多个站点

python - Cython 和 CPython 之间的列表理解结果不同

python - 如何在Python中指定不同的第一个单词

Python确保文件以行返回结尾?

php - 如何防止 Upstart 杀死守护进程的子进程?

Python 计算器 - 使用 3 个数字时出现问题

c - 子进程是否也应该解锁被阻塞的 SIGCHLD 信号?

c++ - 我应该使用什么信号来终止/终止 Windows 上的应用程序?

django - 在 WSGI/Passenger 下使用 Werkzeug 调试 Django - 问题