-
[Python] Python 자동화 Schedule 모듈python 2021. 1. 22. 11:53
매일 혹은 매주 함수를 수행하고 결과값을 저장하거나 DB에 적재하는 등의 일을 할 때가 있다. 그 때 사용할 수 있는 것이 Python의 자동화 모듈 Schedule이다. 별도의 install이 필요하다. pip를 활용하여 install을 진행한다.
schedule.readthedocs.io/en/stable/
schedule — schedule 0.4.0 documentation
schedule.readthedocs.io
1. 초, 분, 시간 단위로 실행
import schedule import time def geeks(): print("Shaurya says Geeksforgeeks") def bedtime(): print("It is bed time go rest") def good_luck(): print("Good Luck for Test") schedule.every().seconds.do(geeks) schedule.every().minutes.do(bedtime) schedule.every().hours.do(good_luck) while True: schedule.run_pending() time.sleep(1)
2. 특정 시간"마다" 실행
import schedule import time def geeks(): print("Shaurya says Geeksforgeeks") def bedtime(): print("It is bed time go rest") def good_luck(): print("Good Luck for Test") # 매 1초마다 실행 schedule.every(1).seconds.do(geeks) # 매 2분마다 실행 schedule.every(2).minutes.do(bedtime) # 매 3시간마다 실행 schedule.every(3).hours.do(good_luck) while True: schedule.run_pending() time.sleep(1)
3. 특정 시간"에" 실행
- Schedule.every()의 메서드로 월~일요일을 지정하여 특정 요일에 사용을 지정할 수 있다. 그냥 day()메서드의 경우 "매일"을 뜻한다.
import schedule import time def geeks(): print("Shaurya says Geeksforgeeks") # 매주 금요일 11시 17분에 geeks함수 실행 schedule.every().friday.at("11:17").do(geeks) # 만약 5일마다 11시 17분에 geeks함수 수행하는 경우에는 아래와 같다 schedule.every(5).days.at("11:17").do(geeks) while True: schedule.run_pending() time.sleep(1)
4. 일정 기간 안에 무작위 실행
- 처음에는 every().to()가 5초부터 10초까지 함수를 수행하라는 뜻인줄 알았는데 공식 documents에서는 5~10사이에 무작위로 함수 를 수행하는 것이라고 설명되어 있다.
import schedule import time def my_job(): # This job will execute every 5 to 10 seconds. print('Foo') schedule.every(5).to(10).seconds.do(my_job) while True: # Checks whether a scheduled task # is pending to run or not schedule.run_pending() time.sleep(1)
5. 함수 파라미터 넘기기
- schedule.every(2).seconds.do( work("a","b") ) 함수를 call해서 파라미터를 넣어주면 Error가 발생한다.
import schedule import time def work(a,b): print("Study and work hard",a,b) def geeks(a,b): print("Shaurya says Geeksforgeeks",a,b) schedule.every(2).seconds.do(work, "a","b") schedule.every(3).seconds.do(geeks, a="a",b="b") while True: schedule.run_pending() time.sleep(1)
6. 한 번만 수행 후 종료하기
def job_that_executes_once(): # Do some work ... return schedule.CancelJob schedule.every().day.at('22:30').do(job_that_executes_once)
7. 각각의 함수에 쓰레드 할당하기
import threading import time import schedule def job(): print("I'm running on thread %s" % threading.current_thread()) def run_threaded(job_func): job_thread = threading.Thread(target=job_func) job_thread.start() schedule.every(10).seconds.do(run_threaded, job) schedule.every(10).seconds.do(run_threaded, job) schedule.every(10).seconds.do(run_threaded, job) schedule.every(10).seconds.do(run_threaded, job) schedule.every(10).seconds.do(run_threaded, job) while 1: schedule.run_pending() time.sleep(1)
'python' 카테고리의 다른 글
[python] index와 find의 차이 (0) 2021.07.08 [Python] Multiprocessing 예제 Code (0) 2021.07.01 [pip] requirements.txt 추출할 때 version대신 다른 reference가 생기는 bug (0) 2021.06.29 [Python] 지구의 타원을 고려한 거리계산 Package haversine (0) 2021.05.20 [Python] Command창에서 Argument 추가 argparse (0) 2021.04.09