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(…))
解决了这个问题。我的客户没有将回调作为协同程序处理,因此
。请确保未来(…)
将其解决。