如何在Python中安排定期任务?

我怎样才能安排在python定期任务没有阻止?

这是一个简单的情况。 假设该票证variables在2小时后变为无效。 所以我需要从服务器获取它,但是,我只是保持简单。

ticket = 1 # It expires every 2 hours def process_using_ticket(): # This function is called using a get request from flask server print('hello', ticket) 

我怎样才能每隔两小时重置为1而不被阻塞?

一种方法可能是开始一个线程和睡眠2小时,然后重置variables,但我想知道是否有更好的select。

注意:一切都运行在docker上。

这看起来像cron一个用例,一个在所有linux机器上find的简单实用程序来调度周期性任务。 一个简单的cron任务可以像下面这样创build:

 $ crontab -e 

在cron中,input一个条目

 0 */2 * * * /home/username/ticket_script.py 

确保您的脚本具有可执行权限。 如果你在你的脚本中打印某些东西,使cron条目redirect它的输出

 0 */2 * * * /home/username/ticket_script.py >> /home/username/ticket_script_runs.log 

对于在Docker中运行这个问题,你可以通过这个线程 – > https://forums.docker.com/t/cronjobs-in-docker-container/2618/5这个说:

大多数Docker容器只运行你指定的二进制文件(在本例中为/ bin / bash),所以没有cron守护进程正在运行来触发这些作业。

有很多方法可以解决这个问题 – 对于小型的adhoc,可以将cron条目添加到主机的crontab中,然后使用docker exec containername在容器中触发作业。

您可以使用启动cron的shell脚本replace容器入口点,或者如果您需要多个服务,请使用supervisord之类的东西来pipe理它们。

如果你全力以赴,你可以创build一个cron容器,然后你可以使用docker exec来启动任务。


另一种方法是你已经拥有的 – 进入睡眠2小时,或者保持time_last_read时间戳,继续评估自上次读取后2小时( time_now - time_last_read >= 2_HOURS ),并重新读取值到内存中一旦条件为真,并重置time_last_read

把它放在time.sleep(7200000)的函数中。 像这样:

 import time ticket = 1 def main_loop(): while True: time.sleep(7200000) ticket = 1 def process_using_ticket(): print('hello', ticket) main_loop()