gpt4 book ai didi

python - 将任务添加到运行循环并运行直到完成

转载 作者:行者123 更新时间:2023-12-05 04:43:48 24 4
gpt4 key购买 nike

我有一个从 async 函数调用的函数,没有 await,我的函数需要调用 async 函数。我可以使用 asyncio.get_running_loop().create_task(sleep()) 执行此操作,但顶层的 run_until_complete 在新任务完成之前不会运行。

如何让事件循环运行直到新任务完成?

我不能让我的函数async因为它不是用await调用的。

我无法改变 future sleep 。我只控制 in_control

import asyncio


def in_control(sleep):
"""
How do I get this to run until complete?
"""
return asyncio.get_running_loop().create_task(sleep())


async def future():
async def sleep():
await asyncio.sleep(10)
print('ok')

in_control(sleep)


asyncio.get_event_loop().run_until_complete(future())

最佳答案

看来包裹nest_asyncio会在这里帮助你。我还在示例中包含了获取任务的返回值。

import asyncio
import nest_asyncio


def in_control(sleep):
print("In control")
nest_asyncio.apply()
loop = asyncio.get_running_loop()
task = loop.create_task(sleep())
loop.run_until_complete(task)
print(task.result())
return


async def future():
async def sleep():
for timer in range(10):
print(timer)
await asyncio.sleep(1)
print("Sleep finished")
return "Sleep return"

in_control(sleep)
print("Out of control")


asyncio.get_event_loop().run_until_complete(future())

结果:

In control
0
1
2
3
4
5
6
7
8
9
Sleep finished
Sleep return
Out of control
[Finished in 10.2s]

关于python - 将任务添加到运行循环并运行直到完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69502756/

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