gpt4 book ai didi

python - 像gevent中的cron(计时器)

转载 作者:太空狗 更新时间:2023-10-29 21:14:48 27 4
gpt4 key购买 nike

如何在 gevent 中制作经典计时器?

我目前正在使用 gevent.spawn_later 但有没有办法像 cron 一样使用 core.timer 就像说“按间隔执行回调”?

def callback():
# do something
print '!'

timer = core.timer(10, callback)
timer.start()

outpout:
0s
10s !
20s !
30s !

最佳答案

这取决于您希望工作安排的准确程度。有几种机制:

This blog有一个使用 gevent.spawn_later 创建计时器的巧妙技巧:

def schedule(delay, func, *args, **kw_args):
gevent.spawn_later(0, func, *args, **kw_args)
gevent.spawn_later(delay, schedule, delay, func, *args, **kw_args)

或者当然你可以简单地睡在一个可能更具可读性的循环中:

def run_regularly(self, function, interval, *args, **kwargs):
while True:
gevent.sleep(interval)
function(*args, **kwargs)

然而,这两者都会随着时间的推移而漂移,特别是如果您的函数相对于间隔需要时间来完成。您可以通过在函数执行时调整 sleep 间隔来进行补偿:

def run_regularly(self, function, interval, *args, **kwargs):
while True:
before = time.time()
function(*args, **kwargs)

duration = time.time() - before
if duration < interval:
gevent.sleep(interval-duration)
else:
warning("function %s duration exceeded %f interval (took %f)" % (
function.__name__, interval, duration))

这仍然会漂移,只是没有那么多...

关于python - 像gevent中的cron(计时器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13206798/

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