我想从另一个任务中停止一个 python asyncio 任务,并在第二个任务中的某些条件发生时再次启动它。
请注意,我不想取消第一个任务的协程(该协程停止时的状态应该可用)。另外,我不关心第一个任务所处的确切状态,我只希望事件循环停止运行第一个任务,直到第二个任务另行通知。
我希望这个示例代码有助于理解这个问题:
import asyncio
async def coroutine1():
i = 0
while(True):
i += 1
print("coroutine1: " + str(i) )
await asyncio.sleep(1)
async def coroutine2(task1):
i = 0
while(True):
i += 1
if (i > 3) and (i<10):
pass #TODO: stop task1 here
else:
pass #TODO: Maybe check if task1 is running
#and start task1 again if it's not?
print("coroutine2: " + str(i) )
await asyncio.sleep(1)
async def main_coroutine():
loop = asyncio.get_event_loop()
task1 = loop.create_task(coroutine1())
task2 = loop.create_task(coroutine2(task1))
done, pending = await asyncio.wait(
[task1, task2]
, return_when=asyncio.FIRST_COMPLETED,)
loop = asyncio.get_event_loop()
loop.run_until_complete(main_coroutine())
loop.close()
慕神8447489
相关分类