Python 在tornado中运行单独的epoll循环
我正在运行一个tornado应用程序,它有一个定期回调函数,可以向每个连接发送消息。e、 g:Python 在tornado中运行单独的epoll循环,python,asynchronous,concurrency,websocket,tornado,Python,Asynchronous,Concurrency,Websocket,Tornado,我正在运行一个tornado应用程序,它有一个定期回调函数,可以向每个连接发送消息。e、 g: def broadcast(): for c in webSocketConnectionList: c.write_message("message") 上面的代码与我的代码类似,每500秒从附加到IOLoop的定期回调运行一次。不过我想做的是让它与ioloop异步运行。也就是说,此方法使用无限循环不断重复自身 所以问题是:我如何将这个方法异步地循环到IOloop?我不确定
def broadcast():
for c in webSocketConnectionList:
c.write_message("message")
上面的代码与我的代码类似,每500秒从附加到IOLoop的定期回调运行一次。不过我想做的是让它与ioloop异步运行。也就是说,此方法使用无限循环不断重复自身
所以问题是:我如何将这个方法异步地循环到IOloop?我不确定“异步到IOloop”是什么意思。你能解释一下你想做什么吗 如果要用无限循环替换PeriodicCallback,请执行以下操作:
from datetime import timedelta
from tornado import gen, ioloop
@gen.coroutine
def broadcast():
loop = ioloop.IOLoop.current()
while True:
print "broadcast"
for c in webSocketConnectionList:
c.write_message("message")
yield gen.Task(loop.add_timeout, timedelta(seconds=500))
if __name__ == "__main__":
broadcast()
ioloop.IOLoop.current().start()
yield
语句允许循环在暂停broadcast
方法时继续运行和处理其他事件(如HTTP请求)