【问题标题】:tornado websocket server - connections queue龙卷风 websocket 服务器 - 连接队列
【发布时间】:2020-07-12 22:04:54
【问题描述】:
我有一个处理数据的tornado.websocket.WebSocketHandler。这个想法是实例化有限数量的处理程序(例如,它们受 CPU 内核数量的限制)。我想将其余连接放入队列中(一旦打开),以便在另一个完成时激活其中一个。
我试图通过threading.Semaphore 做到这一点,但似乎龙卷风套接字处理程序在单个线程中运行,所以一切都挂了。我怎样才能做到这一点?
【问题讨论】:
标签:
python
python-3.x
websocket
tornado
python-multithreading
【解决方案1】:
Tornado 在tornado.locks.Semaphore 中有自己的asynchronous semaphore class。
Tornado 旨在使连接变得非常便宜 - 每个核心一个连接将是一个极低的限制。我建议不要限制连接本身的数量,而是限制你对这些连接所做的事情。 (记住 GIL - 除非你为你的 cpu 密集型工作调用 C 扩展,否则无论如何你都不能使用 python 的多个 CPU 内核)。在有界的 ThreadPoolExecutor 上执行 CPU 密集型工作可能是完成听起来您正在尝试做的事情的最佳方式。