我知道龙卷风是一个单线程和非阻塞服务器,因此请求是按顺序处理的(除非使用事件驱动的方法进行 IO 操作)。
有没有办法在龙卷风中并行处理多个请求以进行正常(非 IO)执行。我不能分叉多个进程,因为我需要一个跨请求的公共内存空间。
如果不可能,请向我推荐其他可以处理并行请求并支持 wsgi 的 python 服务器。
我知道龙卷风是一个单线程和非阻塞服务器,因此请求是按顺序处理的(除非使用事件驱动的方法进行 IO 操作)。
有没有办法在龙卷风中并行处理多个请求以进行正常(非 IO)执行。我不能分叉多个进程,因为我需要一个跨请求的公共内存空间。
如果不可能,请向我推荐其他可以处理并行请求并支持 wsgi 的 python 服务器。
如果您真的要处理多个同时受计算限制的请求,并且您想在 Python 中完成,那么您需要一个多进程服务器,而不是多线程服务器。CPython 具有全局解释器锁 (GIL),可防止多个线程同时执行 python 字节码。
大多数 Web 应用程序只做很少的计算,而是等待来自数据库、磁盘或其他服务器上的服务的 I/O。确保在丢弃 Tornado 之前需要处理计算绑定请求。
您的问题的答案实际上取决于这些计算绑定线程将运行多长时间。如果它们运行时间很短,并且处理它们的速度至少与它们到达的速度相匹配,那么 Tornado 就可以了。它是真正的单线程,但它的扩展性非常好。
如果您的计算绑定请求长时间运行,那么使用线程服务器不一定有帮助,因为正如 Ned Batchelder 已经指出的那样,GIL 将成为一个瓶颈。
如果您能够放宽在所有请求中具有相同内存空间的限制,那么您可以考虑使用PyZMQ运行 Tornado ,因为它提供了一种运行多个 Tornado 后端的方法,前端由单个 Tornado 实例。这使您可以继续将 Tornado 用于整个解决方案。有关更多信息,请参阅 PyZMQ 的web.zmqweb模块。