2

我想每 60 秒定期执行一次 FUNCTION,但如果之前的运行尚未完成,我不想再次执行 FUNCTION。如果上一次运行在例如 120 秒内完成,那么我想立即执行一个新的 FUNCTION 调用。如果之前的运行在例如 10 秒内完成,那么我想在执行新的 FUNCTION 调用之前等待 50 秒。

请在下面查看我的实现。

我可以使用 subprocess.run 或一些 timeloop 库来实现它,以便实现更清晰吗?

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)
4

1 回答 1

0

也许 apsheduler 可以帮助你。但是,如果您的工作运行时间超过等待时间,则可以跳过它。在这种情况下,您可以增加工人的数量。

import datetime
import time

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()

def some_job():
    time.sleep(5)
    print(f"{datetime.datetime.utcnow()}: Every 10 seconds")


job = scheduler.add_job(some_job, 'interval', seconds=10, max_instances=1)

scheduler.start()
try:
    while True:
        time.sleep(1)
finally:
    scheduler.shutdown()
于 2020-03-17T13:37:44.650 回答