【发布时间】:2020-03-16 08:30:26
【问题描述】:
我想每隔 60 秒定期执行一次 FUNCTION,但如果之前的运行尚未完成,我不想再次执行 FUNCTION。如果上一次运行在例如完成120s 然后我想立即执行一个新的 FUNCTION 调用。如果之前的运行在例如完成10s 然后我想在执行新的 FUNCTION 调用之前等待 50s。
请看下面我的实现。
我可以通过例如实现它吗? subprocess.run 或一些时间循环库,以便实现更简洁?
import time
def hello(x):
# some logic here
# execution could take any time between e.g. <10s, 120s>
def main(ii):
while True:
start = int(time.time())
try:
val = next(ii)
except StopIteration as ex:
return None
else:
hello(val)
run_time_diff = int(time.time()) - start
if run_time_diff < 60:
time.sleep(60 - run_time_diff)
ii = iter(list[[...],[...],...[...]])
main(ii=ii)
【问题讨论】:
-
不需要低级的
iter和next。只需使用一个普通的for循环,它就更干净了。我认为您的运行时计算调度程序是可以的,除了时间戳的int()引入了舍入错误。 -
由于内存效率问题,我只想对迭代器进行操作。
-
我看到了,但在那里我找不到处理漂移的解决方案。
-
@NullByte 只有在逐项生成列表时,才能使用迭代器节省内存。如果给定列表,则迭代器只是在原始列表之外存在的移动索引。
标签: python process execution schedule periodicity