【发布时间】:2015-12-29 03:01:35
【问题描述】:
我使用 CherryPy、Apache 和 mod_wsgi 构建了一个网站,除了一个问题之外,一切都很好。当用户操作要求自动发送电子邮件时,我有时使用os.fork 以便父进程可以立即返回并给用户一个“OK”消息,而子进程负责发送电子邮件(可能需要几秒钟,我不希望用户必须等待)。
当子进程完成其工作并调用sys.exit() 时,就会出现问题。似乎 mod_wsgi 捕获了SystemExit 异常,将回溯转储到我的 Apache 错误日志中,并保持子进程运行。我有两个问题:
它使 Apache 错误日志杂乱无章,并带有不代表任何实际错误的回溯,并且
它让进程继续运行,浪费系统资源。更糟糕的是,这些休眠进程中有多少会随着时间累积?
作为记录,Apache 错误日志中的输出如下所示:
mod_wsgi (pid=14900): SystemExit exception raised by WSGI script '/Users/me/myscript.py' ignored.
随后是导致 sys.exit() 调用的回溯。
我猜this 解释了为什么 mod_wsgi 捕获了SystemExit 异常,但这对我没有帮助。
如果有一种方法可以配置 mod_wsgi 的行为,那就太好了,但是当我在 the docs 中搜索“SystemExit”和“sys.exit”时,都没有找到任何东西。
在这个站点上搜索“mod_wsgi SystemExit”只得到六篇文章,而且没有一篇是询问如何允许子进程退出。
有谁知道我怎样才能让子进程真正退出,并使 mod_wsgi 不会将任何内容转储到 Apache 错误日志中?
【问题讨论】:
标签: python apache mod-wsgi cherrypy