[Python] 일정한 주기나 특정 시간에 코드 실행시키기: Apscheduler

2022. 8. 29. 08:18Back-end/Python

반응형

Apscheduler

 

  • 일정한 주기마다 실행되어야 하는 코드를 예약할 수 있는 Python 기반 스케쥴링 라이브러리입니다.
  • 데몬이 아니며 앱 내부에서 실행됩니다.
  • BlockingScheduler: 하나의 프로세스에서만 동작하며 스케쥴링 된 작업이 실행될때 다른 작업은 일시중단됩니다.
  • BackgroundScheduler: 백그라운드에서 동작하며 스케쥴링 된 작업이 실행될때 다른 작업도 할 수 있습니다.

Apscheduler 설치하기

터미널을 키고 다음을 입력합니다.

pip install apscheduler

 

Apscheduler 사용하기: BackgroundScheduler

BackgroundScheduler 객체를 초기화하고 그 객체의 add_job()를 실행해서 작업을 예약합나다.

 

1. 특정 시간에 주기적으로 작업 실행

add_job()의 parameter로 'cron'을 넘겨주어야 합니다. 아침 8시에 say()가 실행됩니다.

from apscheduler.schedulers.background import BackgroundScheduler

if __name__ == "__main__":
  main()

def main():
  sched = BackgroundScheduler(timezone='Asia/Seoul')  # 시간대 설정
  sched.add_job(say, 'cron', hour='8',minute='00', id='test')  # 한국시간 아침 8시에 say()가 실행됨
  sched.start() #스케쥴링 작업 실행
  
def say():
  print("Hello!")

 

2. 특정 간격마다 작업 실행

add_job()의 parameter로 'interval'을 넘겨주어야 합니다. 10초 간격으로 say가 실행됩니다.

from apscheduler.schedulers.background import BackgroundScheduler

if __name__ == "__main__":
  main()

def main():
  sched.add_job(say, 'interval',minute='10', id='test') # 10초 간격으로 say() 실행
  sched.start() #스케쥴링 작업 실행
  
def say():
  print("Hello!")

 

3. 특정 시간에 한번만 작업 실행

add_job()의 parameter로 'date'를 넘겨주어야 합니다. 아침 8시에 say()가 한번만 실행됩니다.

from apscheduler.schedulers.background import BackgroundScheduler

if __name__ == "__main__":
  main()

def main():
  sched = BackgroundScheduler(timezone='Asia/Seoul')  # 시간대 설정
  sched.add_job(say, 'date', hour='8',minute='00', id='test')  # 한국시간 아침 8시에 say()가 한번만 실행됨
  sched.start() #스케쥴링 작업 실행
  
def say():
  print("Hello!")

 

 

Apscheduler 사용하기: BlockingScheduler

1,2,3번 모두 BlockingScheduler로도 구현이 가능합니다.

from apscheduler.schedulers.background import BlockingScheduler

if __name__ == "__main__":
  main()

def main():
  sched = BlockingScheduler(timezone='Asia/Seoul')  # 시간대 설정
  sched.add_job(say, 'cron', hour='8',minute='00', id='test')  # 한국시간 아침 8시에 say()가 실행됨
  sched.start() #스케쥴링 작업 실행
  
def say():
  print("Hello!")

아침 8시에 주기적으로 say()를 실행하지만 BlockingScheduler이기 때문에 sched.start()만 프로세스에서 실행되며 그 이후의 코드들은 실행되지 않습니다.

 

 

 

 

 

반응형