Maison > Article > développement back-end > Existe-t-il un moyen de résoudre le problème de l'exécution planifiée des programmes en Python ?
import schedule import time def job(): print("I'm working...") schedule.every(10).seconds.do(job) # 每10秒执行一次 schedule.every().wednesday.at("13:15").do(job) # 每周三13点15执行 schedule.every(10).minutes.do(job) # 每10分钟执行一次 schedule.every().hour.do(job) # 每小时执行一次 schedule.every().day.at("10:30").do(job) # 每天十点半执行 schedule.every(5).to(10).minutes.do(job) # 每5-10分钟随机执行一次 schedule.every().monday.do(job) # 每周一执行 schedule.every().minute.at(":17").do(job) # 每分钟的17秒执行一次 while True: schedule.run_pending() # 运行所有可运行的任务
Si vous souhaitez l'exécuter à 4h30, vous devez écrire planning.every().day.at("04:30" ). do(job)
Au lieu d'écrire simplement planning.every().day.at("4:30").do(job)
Notez que si le temps d'exécution du programme est plus court que l'intervalle de temps que vous avez défini , Autrement dit, lorsque le programme planifié commencera à s'exécuter la prochaine fois, si votre dernier programme n'a pas terminé son exécution, un nouveau processus sera ouvert.
S'il y a trop de processus empilés, ce sera un désastre
Exécuter une tâche régulièrement via les paramètres de planification
import schedule import time # 定义某个任务 def job(): ... # 设置执行时间 schedule.every().seconds.do(job) # 每秒执行一次任务 schedule.every().minutes.do(job) # 每分钟执行一次任务 schedule.every().hour.do(job) # 每小时执行一次任务 # 可以指定具体时间间隔 schedule.every(10).minutes.do(job) # 每10分钟执行一次任务 # 设置每天某一时刻执行 schedule.every().day.at("05:15").do(job) # 每天凌晨5点15分执行任务 # 设置星期几执行 schedule.every().monday.at("05:15").do(job) # 每周一凌晨5点15分执行任务 while True: schedule.run_pending() # 运行所有可运行的任务
Le premier Le point auquel il faut prêter attention est que vous devez exécuter manuellement le programme pour démarrer le service (le programme sera mis en pause à ce moment-là), puis poursuivre l'exécution à l'heure spécifiée.
Le deuxième point à noter est que lors de son utilisation, en raison de la durée d'exécution du programme, il y aura un problème de temporisation. Par exemple, en configurant le code pour qu'il s'exécute toutes les 10 minutes, les résultats
schedule.every(10).minutes.do(job) # 每10分钟执行一次任务
apparaissent
, mais l'heure d'exécution suivante est à partir de l'heure de fin de la dernière exécution du programme + 10 minutes, et ce que je veux, c'est commencer du dernier programme. Exécutez +10min, c'est-à-dire que l'heure correcte devrait être 10:20:21. Si cela continue, le délai deviendra de plus en plus grand.
Il suffit d'ajouter une heure précise (le réglage ici est de 15s) :
schedule.every(10).minutes.at(":15").do(job) # 每10分钟过15s执行程序
C'est-à-dire démarrer le service à 10:00:21, et
l'exécuter pour la première fois à 10:10:15 ,
La deuxième exécution est à 10:20:15,
La troisième exécution est à 10:30:15,
…
Cela résout le problème de retard causé par le temps d'exécution du programme.
Attention ! ! ! Lorsque vous démarrez le service pour la première fois, vous devez exécuter le programme 15 secondes après l'heure actuelle pour que ce soit normal.
Par exemple, si le service est démarré à 10:00:08, il sera exécuté à 10:09:15 la prochaine fois (exception)
Par exemple, si le service est démarré à 10:00:21, il sera exécuté à 10:10:15 la prochaine fois (Exception) Normal)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!