gpt4 book ai didi

python-3.x - 测试从常规函数调用 python 协程(async def)

转载 作者:行者123 更新时间:2023-12-04 17:54:43 26 4
gpt4 key购买 nike

假设我有一些 asyncio 协程,它获取一些数据并返回它。像这样:

async def fetch_data(*args):
result = await some_io()
return result

基本上这个协程是从协程链中调用的,初始协程是通过创建一个任务来运行的。
但是,如果出于测试目的,我只想在运行某个文件时以这种方式仅运行一个协程,该怎么办:
if __name__ == '__main__':
result = await fetch_data(*args)
print(result)

显然我不能这样做,因为我试图从非协程函数运行和等待协程。
所以问题是:是否有一些正确的方法可以在不调用协程函数的情况下从协程中获取数据?
我可以做一些 Future对象 result并等待它,但也许还有其他一些更简单、更清晰的方法?

最佳答案

您将需要创建一个事件循环来运行您的协程:

import asyncio

async def async_func():
return "hello"

loop = asyncio.get_event_loop()
result = loop.run_until_complete(async_func())
loop.close()

print(result)

或者作为一个函数:
def run_coroutine(f, *args, **kwargs):
loop = asyncio.get_event_loop()
result = loop.run_until_complete(f(*args, **kwargs))
loop.close()
return result

像这样使用:
print(run_coroutine(async_func))

或者:
assert "expected" == run_coroutine(fetch_data, "param1", param2="foo")

关于python-3.x - 测试从常规函数调用 python 协程(async def),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41263988/

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