gpt4 book ai didi

python - 在事件流之外运行 asyncio 协程

转载 作者:太空宇宙 更新时间:2023-11-03 17:05:24 24 4
gpt4 key购买 nike

我遇到了调用 api.say() 失败的问题。我理解它是一个协程,需要从中产生,但如果我的 print_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()

最佳答案

客户端 API 也可能处理属于协程的回调,即,您可以将 print_all() 转换为协程(在 def 之前添加 async) ,在api.say()之前添加await)。

否则,您可以调用 asyncio.ensure_future(api.say(..)) 来调度协程。它假设 loop.run_until_complete(api.run())api.say() 完成之前不会返回,即 loop.run_forever( ) 在您的程序中等效,或者您等待所有任务 - 显式或隐式收集 (asyncio.Task.all_tasks())。

关于python - 在事件流之外运行 asyncio 协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34641341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com