2017-11-17 25 views
0

다른 시간대를 가진 고객 목록에 대해 특정 시간에 매일 실행되도록 Python 함수를 예약하려고합니다.다른 시간대가있는 Python 일정 작업

이것은 기본적으로 내가하고 싶은 것입니다 : 나는/게시 플라스크와 외부 API를 사용하여 몇 가지 물건을 받기 위해 이것을 사용하고

import schedule 
import time 

def job(text): 
    print("Hello " + text) 

def add_job(user_tz, time, text): 
    schedule.every().day.at(time).do(job(text)) 
    # the above adds all jobs at local time, I want to use different timezones with these 

def run_job(): 
    while(1): 
     schedule.run_pending() 
     time.sleep(1) 

if __name__=='__main__': 
    add_job('America/New_York', "12:00", 'New York') 
    add_job('Europe/London', "12:00", 'London') 
    run_job() 

.

셀러 또는 heroku 스케줄러 또는 무언가가 무언가가 내가 찾고있는 것이 아니고, 가벼운 것이고 debian (또는 nix) env에 대한 python이 이상적 일 것입니다. scheduler, tzcron 및을 살펴 봤지만 시간대와 함께 사용하는 방법을 알 수 없습니다.

또한 crontab을 사용해 보았지만 런타임에 위에서 언급 한 기능을 사용하여 작업을 추가/삭제할 수 있기를 원하기 때문에 런타임에 작업을 추가하는 방법을 알 수 없었습니다.

저는 파이썬에 대한 경험이 있지만 시간대에 관한 첫 번째 문제가 있습니다. 이것에 대해 많이 알지 못합니다. 그래서 놓친 것이 있거나 다른 방법이 있다면 저를 계몽 해주십시오.

감사합니다.

+0

파이썬의'datetime' 패키지를보세요. 외국 시간대를 현지 시간대로 변환하십시오. 또 다른 가능성은 'crontab'을 사용하기위한 견고한 시도를하고 문제를 별도의 질문에 게시하는 것입니다. 어느 곳에서나 해결책을 얻으면 이기게됩니다. – Prune

+0

@Prune 시도해 보겠습니다. 외국 시간대를 현지 시간대로 변환하는 것이 효과가 있다고 보입니다. 나는 너무 바보 같았다. – skybunk

답변

2

화살표 라이브러리는 표준 시간/표준 (imo)보다 훨씬 간단하고 간단합니다. arrow docs.

import arrow 
from datetime import datetime 

now = datetime.now() 
atime = arrow.get(now) 
print(now) 
print (atime) 

eastern = atime.to('US/Eastern') 
print (eastern) 
print (eastern.datetime) 

2017-11-17 09:53:58.700546 
2017-11-17T09:53:58.700546+00:00 
2017-11-17T04:53:58.700546-05:00 
2017-11-17 04:53:58.700546-05:00 

"add_job"메서드를 변경하여 모든 수신 날짜를 표준 시간대 (예 : utc)로 변경합니다.