2013-03-09 65 views
2

假设有新的评论,我需要发邮件给自己。
,我不想阻止向浏览器呈现HTML的web.py。
和线程似乎不工作在这里。如何使用uwsgi web.py来运行后台功能?

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函数执行完毕..其中的发送者是freezed..usually发件人没有完成其工作。 我当然不希望使用sender.join()等待发件人结束。

我认为uwsgi与此没有任何关系..
但我看到一个解释说明uwsgi暂停了web.py app.when没有request.or请求完成。
web.py提供了一种叫@background的方法.. http://webpy.org/cookbook/background
但它似乎有某些problems.it不清理threaddb字典。
它会添加一个参数,如http://domain.com:8080/?_t=3080772748这是丑陋的网址。
有没有更好的解决方案? 像往常一样发送电子邮件,同时提供网址请求。

回答

2

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

+0

谢谢!它是!我从来没有想到,这是uWSGI会冻结线程没有 - 启用线程.. – C19 2013-03-09 08:41:04