program tip

매일 같은 시간에 작업을 수행하는 Python 스크립트

radiobox 2020. 11. 19. 08:02
반응형

매일 같은 시간에 작업을 수행하는 Python 스크립트


이 질문에 이미 답변이 있습니다.

나는 매일 아침 01:00에 무언가를하고 싶은 장기 실행 파이썬 스크립트가 있습니다.

나는 sched 모듈과 Timer 객체를 살펴 보았지만 이것을 달성하기 위해 이것을 사용하는 방법을 볼 수 없습니다.


다음과 같이 할 수 있습니다.

from datetime import datetime
from threading import Timer

x=datetime.today()
y=x.replace(day=x.day+1, hour=1, minute=0, second=0, microsecond=0)
delta_t=y-x

secs=delta_t.seconds+1

def hello_world():
    print "hello world"
    #...

t = Timer(secs, hello_world)
t.start()

다음날 오전 1시에 함수 (예 : hello_world)가 실행됩니다.

편집하다:

@PaulMag가 제안한대로,보다 일반적으로 월말에 도달하여 해당 월의 날짜를 재설정해야하는지 여부를 감지하기 위해이 컨텍스트에서 y의 정의는 다음과 같습니다.

y = x.replace(day=x.day, hour=1, minute=0, second=0, microsecond=0) + timedelta(days=1)

이 수정으로 가져 오기에 timedelta를 추가해야합니다. 다른 코드 라인은 동일하게 유지됩니다. 따라서 total_seconds () 함수를 사용하는 전체 솔루션은 다음과 같습니다.

from datetime import datetime, timedelta
from threading import Timer

x=datetime.today()
y = x.replace(day=x.day, hour=1, minute=0, second=0, microsecond=0) + timedelta(days=1)
delta_t=y-x

secs=delta_t.total_seconds()

def hello_world():
    print "hello world"
    #...

t = Timer(secs, hello_world)
t.start()

저는 01:00에 간단한 Python 프로그램을 시작하는 데에도 상당한 시간을 보냈습니다. 어떤 이유에서인지 cron 을 실행하지 못했고 APScheduler는 단순해야하는 것에 대해 다소 복잡해 보였습니다. 일정 ( https://pypi.python.org/pypi/schedule )이 적절 해 보였습니다.

Python 라이브러리를 설치해야합니다.

pip install schedule

이것은 샘플 프로그램에서 수정되었습니다.

import schedule
import time

def job(t):
    print "I'm working...", t
    return

schedule.every().day.at("01:00").do(job,'It is 01:00')

while True:
    schedule.run_pending()
    time.sleep(60) # wait one minute

작업 대신 자신의 함수를 배치하고 nohup으로 실행해야합니다. 예 :

nohup python2.7 MyScheduledProgram.py &

재부팅하면 다시 시작하는 것을 잊지 마십시오.


APScheduler는 당신이 추구하는 것일 수 있습니다.

from datetime import date
from apscheduler.scheduler import Scheduler

# Start the scheduler
sched = Scheduler()
sched.start()

# Define the function that is to be executed
def my_job(text):
    print text

# The job will be executed on November 6th, 2009
exec_date = date(2009, 11, 6)

# Store the job in a variable in case we want to cancel it
job = sched.add_date_job(my_job, exec_date, ['text'])

# The job will be executed on November 6th, 2009 at 16:30:05
job = sched.add_date_job(my_job, datetime(2009, 11, 6, 16, 30, 5), ['text'])

https://apscheduler.readthedocs.io/en/latest/

You can just get it to schedule another run by building that into the function you are scheduling.


I needed something similar for a task. This is the code I wrote: It calculates the next day and changes the time to whatever is required and finds seconds between currentTime and next scheduled time.

import datetime as dt

def my_job():
    print "hello world"
nextDay = dt.datetime.now() + dt.timedelta(days=1)
dateString = nextDay.strftime('%d-%m-%Y') + " 01-00-00"
newDate = nextDay.strptime(dateString,'%d-%m-%Y %H-%M-%S')
delay = (newDate - dt.datetime.now()).total_seconds()
Timer(delay,my_job,()).start()

참고URL : https://stackoverflow.com/questions/15088037/python-script-to-do-something-at-the-same-time-every-day

반응형