擅长:python、mysql、java
<p>我认为使用<code>asyncio.Queue</code>的解决方案应该适合您</p>
<p>我制作了一个小班作为一个模型来测试这一点:</p>
<pre><code>import asyncio
import time
class Thing:
on_close_q = asyncio.Queue()
def __init__(self):
self.conns = range(3)
def on_close(self, id):
time.sleep(id)
print(f'closing {id}')
self.on_close_q.put_nowait((self, id))
async def notify(self, msg):
print('in notify')
for conn in range(3):
print(f'notifying {conn} {msg}')
async def monitor_on_close():
print('monitoring')
while True:
instance, id = await Thing.on_close_q.get()
await instance.notify(f'{id} is closed')
</code></pre>
<p>从那里开始,您需要在从tornado获得的<code>ioloop</code>中运行<code>monitor_on_close</code>。我从未使用过tornado,但我认为在<code>__main__</code>块中添加类似的内容应该可以:</p>
<pre><code> ioloop.IOLoop.current().add_callback(monitor_on_close)
</code></pre>