【发布时间】:2020-11-24 14:38:20
【问题描述】:
如何以阻塞方式运行异步函数?我不允许修改我的模拟函数 f1() 的签名,也不能轻易切换到 async def,因此不能使用 await 表达式。
async def cc2():
await asyncio.sleep(1)
await asyncio.to_thread(print, "qwerty")
def f1():
t = asyncio.create_task(cc2())
# wait until the task finished before returning
async def main():
f1() # typical call from many places of a program
asyncio.run(main())
我尝试了asyncio.get_running_loop().run_until_complete(t),但破解不起作用,我收到下一个错误。
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.9/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete return future.result() File "<stdin>", line 2, in main File "<stdin>", line 3, in f1 File "/usr/lib/python3.9/asyncio/base_events.py", line 618, in run_until_complete self._check_running() File "/usr/lib/python3.9/asyncio/base_events.py", line 578, in _check_running raise RuntimeError('This event loop is already running') RuntimeError: This event loop is already running
【问题讨论】:
标签: python python-asyncio