Par*_*ris 4 tornado nonblocking infinite-loop websocket python-multithreading
我正在尝试使用Tornado创建一个WebSocket服务器.我想要做的是执行一个特定的命令,它将为IOLoop的每个循环发送一条消息.
使它更清楚; 假设我有以下WebSocket处理程序
class MyHandler(websocket.WebSocketHandler):
def auto_loop(self, *args, **kwargs):
self.write_message('automatic message')
Run Code Online (Sandbox Code Playgroud)
有没有办法auto_loop在每个IOLoop循环上运行,而不会阻塞主线程?
我想我可以使用greenlets,但我正在寻找更多的Tornado原生解决方案.
谢谢
你不应该在每个IOLoop循环中写一条消息:你将压倒你的系统.您希望每隔几毫秒或几秒发送一次.一个协程会做得很好:
import datetime
from tornado.ioloop import IOLoop
from tornado import gen
handlers = set()
@gen.coroutine
def auto_loop():
while True:
for handler in handlers:
handler.write_message('automatic message')
yield gen.Task(
IOLoop.current().add_timeout,
datetime.timedelta(milliseconds=500))
if __name__ == '__main__':
# ... application setup ...
# Start looping.
auto_loop()
IOLoop.current().start()
Run Code Online (Sandbox Code Playgroud)
在MyHandler.open()中,执行handlers.add(self),并在MyHandler.on_close()中执行handlers.discard(self).
| 归档时间: |
|
| 查看次数: |
1940 次 |
| 最近记录: |