龙卷风中的并发性是否可行?

Adh*_*dhi 11 python concurrency wsgi tornado

我知道tornado是一个单线程和非阻塞服务器,因此请求按顺序处理(除非使用事件驱动方法进行IO操作).

有没有办法在龙卷风中并行处理多个请求以进行正常(非IO)执行.我不能分叉多个进程,因为我需要跨请求的公共内存空间.

如果不可能,请向我建议其他可以处理并行请求的python服务器,并且还支持wsgi.

Ned*_*der 10

如果您真的要处理多个计算绑定的同时请求,并且您希望在Python中执行它,那么您需要一个多进程服务器,而不是多线程服务器.CPython具有全局解释器锁(GIL),可防止多个线程同时执行python字节码.

大多数Web应用程序执行的计算非常少,而是等待来自数据库,磁盘或其他服务器上的服务的I/O. 确保在丢弃Tornado之前需要处理计算限制请求.


Rod*_*yde 5

您的问题的答案实际上取决于这些计算绑定线程将运行多长时间.如果它们短时间运行,并且处理它们的速度至少与它们到达的速率相匹配,那么龙卷风就可以了.它确实是单线程的,但它确实可以很好地扩展.

如果您的计算绑定请求长时间运行,那么使用线程服务器不一定会有所帮助,因为正如Ned Batchelder已经指出的那样,GIL将成为瓶颈.

如果您能够放宽对所有请求具有相同内存空间的限制,那么您可以考虑使用PyZMQ运行Tornado ,因为它提供了一种运行多个Tornado后端的方法,前面是一个Tornado实例.这使您可以继续使用Tornado来获得整个解决方案.有关更多信息,请参阅PyZMQ的web.zmqweb模块.