Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在tornado中运行单独的epoll循环_Python_Asynchronous_Concurrency_Websocket_Tornado - Fatal编程技术网

Python 在tornado中运行单独的epoll循环

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?我不确定

我正在运行一个tornado应用程序,它有一个定期回调函数,可以向每个连接发送消息。e、 g:

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请求)