gpt4 book ai didi

python - 两个异步任务 - python 中的一个依赖于另一个任务

转载 作者:行者123 更新时间:2023-12-01 00:20:33 24 4
gpt4 key购买 nike

我需要编写一个代码来实时检查某些变量的状态。我决定使用 asyncio 创建两个异步 def 函数

import asyncio

async def one():
global flag
flag = True
while flag == True:
await asyncio.sleep(0.2)
print("Doing one")

async def two():
await asyncio.sleep(2)
global flag
flag = False

async def main():
tasks = []
tasks.append(one())
tasks.append(two())
await asyncio.gather(*tasks)

loop = asyncio.get_event_loop()
try:
loop.run_until_complete(main())
finally:
loop.close()
print("Loop ended")

当循环开始时,所有任务都已启动,2 秒后 def Two() 设置 flag=False,从而停止 def one().这很好,但我希望 def one() 执行 while 循环而不使用 await asyncio.sleep(0.2) 因为我不想进行真正的实时更新,所以我设置了 等待 asyncio.sleep(0.0)。
这是一个好的做法吗?






最佳答案





使用全局变量确实是不好的做法。您正在寻找的是 asyncio 的原语,特别是 asyncio.Event原始。这是您正在做的事情,但是使用 asyncio.Event:



import asyncio

async def one(event):
while event.is_set() == False:
await asyncio.sleep(0.5)
print("Hello World!")

async def two(event):
await asyncio.sleep(2)
event.set()

async def main():
event = asyncio.Event()
await asyncio.gather(*[one(event), two(event)])

asyncio.run(main())

关于python - 两个异步任务 - python 中的一个依赖于另一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58996639/

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