Maison > développement back-end > Tutoriel Python > Existe-t-il un moyen de résoudre le problème de l'exécution planifiée des programmes en Python ?

Existe-t-il un moyen de résoudre le problème de l'exécution planifiée des programmes en Python ?

王林
Libérer: 2023-05-08 22:52:06
avant
1185 Les gens l'ont consulté

    Programme d'exécution planifiée Python (schedule)

    Utilisez la bibliothèque de planification

    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() # 运行所有可运行的任务
    Copier après la connexion

    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

    Enregistrement du délai et des pièges d'exécution des tâches planifiées Python (planification)

    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() # 运行所有可运行的任务
    Copier après la connexion

    Le problème des pièges

    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分钟执行一次任务
    Copier après la connexion

    apparaissent

    Existe-t-il un moyen de résoudre le problème de lexécution planifiée des programmes en Python ?

    , 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.

    Solution

    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执行程序
    Copier après la connexion

    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal