【问题标题】:how can I use uwsgi web.py to run background function?如何使用 uwsgi web.py 运行后台功能?
【发布时间】:2013-02-24 20:47:50
【问题描述】:

假设有新评论时我需要给自己发送一封电子邮件。
而且我不想阻止 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 请求的同时发送电子邮件。

【问题讨论】:

    标签: python multithreading web.py uwsgi


    【解决方案1】:

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

    【讨论】:

    • 谢谢!它在那里!我从来没有想过是 uWSGI 会在没有 --enable-threads 的情况下冻结线程..
    猜你喜欢
    • 1970-01-01
    • 2017-05-23
    • 2020-08-06
    • 1970-01-01
    • 2021-04-16
    • 2021-04-14
    • 2021-02-26
    • 2011-12-12
    • 2016-10-15
    相关资源
    最近更新 更多