gpt4 book ai didi

python-3.x - asyncio 以不同的间隔定期运行两个不同的函数

转载 作者:行者123 更新时间:2023-12-05 01:16:32 25 4
gpt4 key购买 nike

是否可以使用 asyncio 为每个函数 f 永远以不同的间隔定期运行 2 个不同的函数?

如果是 - 请提供代码示例。

import asyncio

async def f1(host,*arg):
# call every 1 sec
pass

async def f2(url,*args):
# call every 2 sec
pass

预期输出:

00:00 f1 for 1.1.1.1

00:01 f1 for 1.1.1.1

00:02 f2 for 'google.com'

00:02 f1 for 1.1.1.1

00:03 f1 for 1.1.1.1

00:04 f2 for 'google.com'

最佳答案

Would it be possible using asyncio to run 2 different functions periodically with different interval for each f forever ?

当然,只需创建一个以“显而易见”的方式执行此操作的协程,方法是在调用之间使用 asyncio.sleep() 在无限循环中等待协程:

import asyncio, time

async def invoke_forever(period, corofn, *args):
while True:
then = time.time()
await corofn(*args)
elapsed = time.time() - then
await asyncio.sleep(period - elapsed)

问题中描述的场景将设置为:

loop = asyncio.get_event_loop()
loop.create_task(invoke_forever(1, f1, 'host1'))
loop.create_task(invoke_forever(2, f2, 'host2'))
loop.run_forever()

您还可以使用 asyncio.gather 将两个 invoke_forever 合并为一个 awaitable,这样就可以使用 asyncio.run 中引入的函数Python 3.7:

async def invoke_both():
await asyncio.gather(invoke_forever(1, f1, 'host1'),
invoke_forever(2, f2, 'host2'))

asyncio.run(invoke_both())

关于python-3.x - asyncio 以不同的间隔定期运行两个不同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53339921/

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