您需要将协程添加到事件循环中,然后
Future.add_done_callback在协程完成时使用来处理结果:
@asyncio.coroutinedef go(self): return(yield from asyncio.sleep(3, result = b'data reply'))def data_received(self, data): print('Data Received', flush=True) task = asyncio.async(self.go()) # or asyncio.get_event_loop().create_task() task.add_done_callback(self.handle_go_result)def handle_go_result(self, task): data = task.result() self.send(data)data_received根本不允许直接调用协程,因为调用者不会尝试调用协程
yieldfrom,并且在内部创建/运行新的事件循环
data_received将始终阻塞主事件循环,直到内部事件循环结束为止工作。
您只想通过主事件循环(
asyncio.async/
loop.create_task())安排一些工作,并安排在工作完成后运行的回调(
add_done_callback)。



