在多线程中使用tornado时出错python3.6

2024-10-03 17:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是简单地将tornado应用程序与线程一起使用,如下所示:

def MakeApp():
    return tornado.web.Application([(r"/websocket", EchoWebSocket), ])

def run_tornado_websocket():
    app = MakeApp()
    http_server = tornado.httpserver.HTTPServer(app, ssl_options={
        "certfile": os.path.join(os.path.abspath("."), "server.crt"),
        "keyfile": os.path.join(os.path.abspath("."), "server_no_passwd.key"),
        })

    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()

if __name__ == '__main__':
    threads = []
    t = threading.Thread(target=run_tornado_websocket, args=())
    threads.append(t)
    for t in threads:
        t.start()

它在python3.5上运行得很好,但是在python3.6和龙卷风。它获取错误:

^{pr2}$

我认为python3.6中的IOLOOP有一些变化,但我不知道如何解决这个问题,我真的很想知道原因。在


Tags: pathrunapphttpserverosdefstart
1条回答
网友
1楼 · 发布于 2024-10-03 17:15:13

从Tornado5.0开始,默认情况下使用asyncio事件循环。asyncio有一些额外的限制,因为在主线程之外的线程上启动事件循环是一种不常见的模式,而且常常是错误的。必须告诉asyncio要在新线程中使用带有asyncio.set_event_loop(asyncio.new_event_loop())的事件循环,或者使用asyncio.set_event_loop_policy(tornado.platform.asyncio.AnyThreadEventLoopPolicy())禁用此限制。在

相关问题 更多 >