3

假设有新评论时我需要给自己发送一封电子邮件。
而且我不想阻止 web.py 将 HTML 呈现给浏览器。
和线程似乎在这里不起作用。

class comment:
    def POST(self):
       ...
       sender = Thread(target=_sendmail,args=('New Comment',msg))
       sender.start()
       referer = web.ctx.get('HTTP_REFERER', 'http://www.domain.com')
       raise web.SeeOther(referer)

使用线程时的问题是,一旦 POST 功能完成..其中的发件人将被冻结..通常发件人没有完成其工作。而且我当然不想使用 sender.join() 来等待 sender 结束。

我认为uwsgi与此无关..
但我看到一个解释表明uwsgi暂停了web.py应用程序。当没有请求时。或请求完成。
web.py 提供了一种称为@background 的方法。http://webpy.org/cookbook/background
但它似乎有一些问题。它没有清理threaddb字典。
它会在 URL 中添加一个参数,例如http://domain.com:8080/?_t=3080772748 ,这很丑陋。
有更好的解决方案吗?像往常一样在提供 url 请求时发送电子邮件。

4

1 回答 1

3

在 uWSGI 中使用线程没有问题,但请记住使用 --enable-threads 启用它们,否则 GIL(出于性能原因)它不会启用。

于 2013-03-09T08:28:53.537 回答