【发布时间】:2020-02-07 06:05:47
【问题描述】:
在我的项目中,我有一个装饰器可以在同步方法中调用协程:
def async_test(f):
def wrapper(*args, **kwargs):
coro = asyncio.coroutine(f)
future = coro(*args, **kwargs)
loop = asyncio.get_event_loop()
loop.run_until_complete(future)
return wrapper
@async_test
async def test_foo(self):
# test stuff
我需要这个装饰器来直接从我的 IDE 运行测试。
但是现在,我需要从 异步 方法(在 await 之后)调用它们,并且我有 RuntimeError:
RuntimeError: 这个事件循环已经在运行
如何使用 asyncio 循环解决这个问题?
【问题讨论】:
-
你能说明你是如何调用异步方法的吗?
-
您的方法行不通,因为异步事件循环不可重入。您应该有独立同步入口点到异步功能,并使用
await从其他异步函数调用异步函数。 -
也许我应该找到绕过这个装饰器的方法
标签: python python-3.x async-await python-asyncio python-decorators