我怎样才能使用uwsgi web.py来运行后台功能?

时间:2013-03-09 08:22:11

标签: python multithreading web.py uwsgi

当有新评论时,我需要发送电子邮件给自己 我不想阻止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()来等待发送者结束。

我认为uwsgi与此没有任何关系。
但我看到一个解释表明uwsgi暂停了web.py app.When没有请求。或者请求已经完成。
web.py提供了一种名为@background的方法.. http://webpy.org/cookbook/background
但它似乎有一些问题。它不会清理threaddb字典 它会为像http://domain.com:8080/?_t=3080772748这样丑陋的网址添加一个参数 有更好的解决方案吗? 照常向发送网址请求发送电子邮件。

1 个答案:

答案 0 :(得分:2)

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