【发布时间】:2021-12-29 04:36:03
【问题描述】:
我每小时运行一个 python 脚本,并且我一直在 while 循环中使用time.sleep(3600)。它似乎可以根据需要工作,但我担心它会阻止新任务。我对此的研究似乎是它只阻塞了当前线程,但我想 100% 确定。虽然每小时的工作不应该超过 15 分钟,但如果它完成或挂起,我不希望它阻止下一个开始的工作。这就是我的做法:
import threading
import time
def long_hourly_job():
# do some long task
pass
if __name__ == "__main__":
while True:
thr = threading.Thread(target=long_hourly_job)
thr.start()
time.sleep(3600)
这就够了吗?
另外,我使用time.sleep 来完成这个每小时工作而不是 cron 工作的原因是我想在代码中做所有事情以使 dockerization 更干净。
【问题讨论】:
-
time.sleep只阻塞当前线程。 -
@TimRoberts 感谢蒂姆。我就是这么想的,所以我现在的实现应该没问题吧?
-
@guy 是的,它应该每 3600 秒启动一次
long_hourly_job。但如果您的long_hourly_job运行时间超过 1 小时,则可能存在重叠。 -
@niranjan94 只要没有被阻止,重叠就可以了,尽管你提出了一个很好的观点,可能会在一小时内杀死任何未完成的事情
-
如果您想在容器中运行类似 crontab 的作业,我还建议您研究一下 apscheduler。我将它用于flask-app ML 再训练,它非常有效。 apscheduler.readthedocs.io/en/3.x/userguide.html
标签: python python-multithreading