擅长:python、mysql、java
<p>新线程没有事件循环,因此必须显式传递和设置它:</p>
<pre><code>def worker(ws, loop):
asyncio.set_event_loop(loop)
loop.run_until_complete(ws.start())
if __name__ == '__main__':
ws = Server()
loop = asyncio.new_event_loop()
p = threading.Thread(target=worker, args=(ws, loop,))
p.start()
</code></pre>
<p>另外,<code>p.join()</code>不会正确终止脚本,因为您从未停止服务器,因此循环将继续运行,可能会挂断线程。在加入线程之前,应该像<code>loop.call_soon_threadsafe(ws.shutdown)</code>那样调用smth,最好是等待服务器正常关闭。</p>