ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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)

    댓글

Designed by Tistory.