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

kep*_*pla 14 python django multithreading wsgi flask

为了实现类似于谷歌应用程序引擎的"延期调用"(即处理请求,然后处理延期任务),我进行了一些实验,并提出了解决方案,以生成一个线程,在该线程中处理我的延迟调用.

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

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

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

Cat*_*lus 13

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

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


Gra*_*ton 7

FWIW,也读过:

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

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

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