可以在wsgi-application中生成线程吗?

时间:2011-07-05 07:53:25

标签: python django multithreading wsgi flask

为了实现类似于谷歌应用引擎'延期调用'的东西(即处理请求,之后处理延期任务),我实验了一点,并提出了解决方案,以产生一个我延期的线程电话处理。

我现在正试图确定这是否是一种可接受的方式。

是否有可能(根据WSGI规范)在处理实际请求之后但在所有线程用完之前,Web服务器终止了该进程?

(如果有更好的方法,那也没关系)

2 个答案:

答案 0 :(得分:13)

WSGI没有指定应用程序进程的生命周期(因为WSGI应用程序是Python可调用对象)。您可以以完全独立于Web服务器的方式运行它,在这种情况下,只有您可以控制生命周期。

WSGI中也没有任何内容可以禁止您生成线程,进程或做任何你想做的事情。

答案 1 :(得分:7)

FWIW,也读过:

http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode

将迭代的close()操作挂钩是WSGI规范本身的上下文中用于执行延迟工作的唯一方法。这不是在一个单独的线程中,并且会发生在实际请求的上下文中,尽管应该将响应刷新回客户端之后。因此,在工作完成之前,您的延迟操作将使用该请求线程,因此请求线程在此之前将无法处理其他请求。

通常,如果您使用后台线程,则无法保证任何托管机制在关闭进程之前等待这些后台线程完成。实际上,甚至无法想到任何等待的标准部署机制。实际上甚至没有保证在进程关闭时调用atexit处理程序,这也是参考文档中简要讨论的内容。