<p>你可以试试<a href="https://pypi.org/project/simple_scheduler/" rel="nofollow noreferrer">simple-scheduler</a>。它的编写正是为了达到这一目的,即长作业不应在调度时隐藏/停止较小作业的执行。以下是一个例子:</p>
<p>该函数的执行时间为x秒,但每5秒和7秒分别调用一次。两个函数完全同时调用。程序不会崩溃,也不会错过未来的运行:</p>
<pre><code>from time import time, ctime, sleep
from simple_scheduler.event import event_scheduler
event_scheduler.timezones()
TZ = "Asia/Kolkata"
def wait(t):
began_at = ctime(time())
sleep(t)
print(f"I waited {t} seconds. [From: {began_at} to {ctime(time())}]")
event_scheduler.add_job(target = wait,
kwargs = {"t":5}, # ==> 5 seconds
when = ["*|17:24"],
tz = TZ)
event_scheduler.add_job(target = wait,
kwargs = {"t":7}, # ==> 7 seconds
when = ["*|17:24"],
tz = TZ)
event_scheduler.run()
</code></pre>
<p>输出:</p>
<pre><code>Sat May 22 17:24:12 2021 :: wait [event @sat|17:24|Asia/Kolkata]
Sat May 22 17:24:12 2021 :: wait [event @sat|17:24|Asia/Kolkata]
I waited 5 seconds. [From: Sat May 22 17:24:12 2021 to Sat May 22 17:24:17 2021]
I waited 7 seconds. [From: Sat May 22 17:24:12 2021 to Sat May 22 17:24:19 2021]
</code></pre>