Python 在wsgi应用程序中生成线程可以吗?

Python 在wsgi应用程序中生成线程可以吗?,python,django,multithreading,wsgi,flask,Python,Django,Multithreading,Wsgi,Flask,为了实现类似于google应用程序引擎“延迟调用”(即,处理请求,然后处理延迟任务)的功能,我进行了一些实验,并提出了一个解决方案,以生成一个线程来处理延迟调用 我现在正试图确定这是否是一种可接受的方式 是否可能(根据WSGI规范)在处理实际请求之后,但在所有线程用完之前,由Web服务器终止进程 (如果有更好的方法,也可以)WSGI不指定应用程序进程的生存期(因为WSGI应用程序是Python可调用对象)。您可以以完全独立于web服务器的方式运行它,在这种情况下,只有您控制生命周期 WSGI中也

为了实现类似于google应用程序引擎“延迟调用”(即,处理请求,然后处理延迟任务)的功能,我进行了一些实验,并提出了一个解决方案,以生成一个线程来处理延迟调用

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

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


(如果有更好的方法,也可以)

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


WSGI中也没有任何东西会禁止您生成线程或进程,或者做任何您想做的事情。

FWIW,还可以阅读:

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


一般来说,若您确实使用后台线程,那个么并不能保证任何托管机制会等到这些后台线程完成后再关闭进程。事实上,我们甚至想不出任何标准的部署机制会等待。实际上甚至不能保证在进程关闭时调用atexit处理程序,参考文档也简要介绍了这一点。

您可能需要某种任务队列+线程池安排,这两种安排都是为了性能,而且为了避免线程太多而导致彼此饥饿。@Marcin:好的一点,当它表明线程方法可行时,我将实现这样一个基础结构。我很失望你还没有得到任何答案。也许是一个糟糕的标题或措辞?有什么改进的想法吗?您可以添加一些wsgi框架的名称,或者有一个更面向任务的标题(例如,“在wsgi web应用程序中生成线程以创建延迟调用”)。