Python 在事件流外运行asyncio协同路由
我遇到调用Python 在事件流外运行asyncio协同路由,python,python-3.x,coroutine,python-asyncio,Python,Python 3.x,Coroutine,Python Asyncio,我遇到调用api.say()失败的问题。我知道这是一个协同程序,需要从中生成,但如果我的print\u all是一个标准函数,这是否有效 构造此示例的正确方法是什么 请假设客户端是不可更改的,只有我示例中的代码 from .client import Client import asyncio api = Client() login = ('', '') def print_all(b=None, m=None): print("Buffer!", b) print("Me
api.say()
失败的问题。我知道这是一个协同程序,需要从中生成,但如果我的print\u all
是一个标准函数,这是否有效
构造此示例的正确方法是什么
请假设客户端是不可更改的,只有我示例中的代码
from .client import Client
import asyncio
api = Client()
login = ('', '')
def print_all(b=None, m=None):
print("Buffer!", b)
print("Message", m)
if b and m:
if b.name == 'bat':
print("-sending to", b)
api.say(b, "Hey yo."): # <----
def main():
api.login(*login)
api.register_message_callback(print_all)
api.register_state_callback(print_all)
loop = asyncio.get_event_loop()
loop.run_until_complete(api.run())
loop.close()
if __name__ == '__main__':
main()
from.client导入客户端
导入异步
api=客户机()
登录名=(“”,“”)
def print_all(b=None,m=None):
打印(“缓冲区!”,b)
打印(“消息”,m)
如果b和m:
如果b.name='bat':
打印(“-发送到”,b)
api.say(b,“Hey-yo.”):#客户端api可能也会处理属于协同路由的回调,也就是说,您可以将print_all()
转换为协同路由(在def
之前预编async
,在api.say()
之前添加wait
)
否则,您可以调用asyncio.sure_future(api.say(..)
来调度协同路由。它假设loop.run\u直到\u完成(api.run())
不会在api.say()
完成之前返回,也就是说,程序中存在loop.run\u forever()
等价物,或者等待所有任务——显式或隐式收集(asyncio.Task.all\u tasks()
)。谢谢asyncio。确保未来(api.say(…))
解决了这个问题。我的客户没有将回调作为协同程序处理,因此。请确保未来(…)
将其解决。