Как мне запланировать программу на Python - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужна программа, которая запускает мою основную программу два раза в неделю ... Я пытался использовать crontab, но я не мог заставить ее работать, поскольку я программирую на Windows (и это приводит к трудностям), и я хочу, чтобы программадля запуска на windows

Моя основная программа не делает ничего сумасшедшего, просто проверяет файл Excel и дает вам некоторую информацию в окне tkinter

Я также читал о планировщике задач в Windows, но яхотите свободно редактировать или удалять запланированное событие в программе ... any help?

Ответы [ 4 ]

0 голосов
/ 12 февраля 2019

Используйте Croniter для решения.Это работало на Linux.Попробуйте это на Windows.

from datetime import datetime, timedelta   #for Scheduler
import time
from croniter import croniter

# Class for Scheduling
class schedule_fun():
    def starter(self):
        nextRunTime = self.getNextCronRunTime(schedule)
        while True:
             roundedDownTime = self.roundDownTime()
             if (roundedDownTime == nextRunTime):
                 global timestamp
                 timestamp = datetime.now().strftime("%B %d %Y, %H:%M:%S")
                 #For setting variables with values
                 print ("Hi, I am Steven")
                 nextRunTime = self.getNextCronRunTime(schedule)
             elif (roundedDownTime > nextRunTime):
                 print("error")

                 # We missed an execution. Error. Re initialize.
                 nextRunTime = self.getNextCronRunTime(schedule)
             self.sleepTillTopOfNextMinute()
    # Round time down to the top of the previous minute
    def roundDownTime(self,dt=None, dateDelta=timedelta(minutes=1)):
        roundTo = dateDelta.total_seconds()
        if dt == None : dt = datetime.now()
        seconds = (dt - dt.min).seconds
        rounding = (seconds+roundTo/2) // roundTo * roundTo
        return dt + timedelta(0,rounding-seconds,-dt.microsecond)
    # Get next run time from now, based on schedule specified by cron string
    def getNextCronRunTime(self,schedule):
        return croniter(schedule, datetime.now()).get_next(datetime)
    # Sleep till the top of the next minute
    def sleepTillTopOfNextMinute(self):
        t = datetime.utcnow()
        sleeptime = 60 - (t.second + t.microsecond/1000000.0)
        time.sleep(sleeptime)

# Program starts here!!!!
if __name__ == '__main__':
    schedule =  '*/1 * * * *'
    scl = schedule_fun()
    scl.starter()
0 голосов
/ 30 сентября 2018

Есть простой способ сделать это, мой дорогой друг!Сначала вы должны установить на свой компьютер виртуальную машину с ОС Linux (используйте virtualbox и vmware).Вы можете просто использовать linux crontab !

cronb -e

и использовать свой любимый редактор, написать эту строку

0 8 * * 3,7 python /path/to/dir/test.py

и ваш код будет выполнен в 08:00 в среду и воскресенье.

0 голосов
/ 30 сентября 2018

Вы можете использовать API планировщика заданий для программного создания запланированного задания.Пример: https://ziade.org/2007/11/01/scheduling-tasks-in-windows-with-pywin32/

Если вы не хотите делать pywin32 зависимостью для этого проекта, вы можете получить более простое планирование с помощью вызова schtask.exe с помощью библиотеки подпроцесса.

0 голосов
/ 28 сентября 2018

Apache airflow выполнит работу

У каждой группы доступности базы данных может быть или не быть расписание, которое информирует о том, как создаются прогоны группы доступности базы данных.schedule_interval определяется как аргументы DAG и получает предпочтительно выражение cron в виде объекта str или datetime.timedelta.Кроме того, вы также можете использовать один из этих «пресетов» cron

...