Python 线程 - 每 X 分钟运行一次,除非最后一个线程仍在运行



这是针对3.x python程序的。为 Web 服务器创建一个线程 - 那里没有问题。

线程中运行另一个函数,我想每 X 秒运行一次,除非前一个线程仍在运行,在这种情况下我们可以跳过此迭代。我不是在寻求在上一次运行结束和新运行开始之间休息 X 秒。

期望的行为:

X = 180 秒(3 分钟(

8:00 am - Code begins
8:01 am - Code completes
8:03 am - Code begins
8:07 am - Code completes (we skipped the 8:06 am run)
8:09 am - Code begins

以下代码每 X 秒运行一次函数 (main(,但不检查是否已有先前的线程运行。

def sync():
t_sync = threading.Timer(syncInterval, sync)
t_sync.daemon = False
t_sync.start()
main()

实现这一目标的最佳方法是什么?


多亏了 PygoNode 关于 is_alive(( 的想法,我才能让以下工作。这可能不是最优雅的方法,但它有效。

def sync():
t_sync = threading.Thread(target=main)
t_sync.daemon = False
t_sync.start()
while True:
time.sleep (syncInterval)
if t_sync.is_alive():
logger.warning ('Sync: Prior thread still running. Do not kick off another sync.')
else:
t_sync = threading.Thread(target=main)
t_sync.daemon = False
t_sync.start()

线程。计时器有一个 is_alive(( 方法。您可以重构sync()方法以在启动后返回线程,然后将该引用传递给下一个sync()调用检查现有是否仍处于活动状态/正在运行。

最新更新