반응형
질문
나는 파이썬에서 매 60초마다 함수를 반복적으로 실행하고 싶습니다(마치 Objective C의 NSTimer이나 JS의 setTimeout처럼). 이 코드는 데몬으로 실행되며, 사용자가 cron을 설정할 필요 없이 매 분마다 파이썬 스크립트를 호출하는 것과 같습니다.
Python에서 구현된 cron에 관한 이 질문에서는 해결책이 x초 동안 sleep()을 하는 것처럼 보입니다. 나는 그렇게 고급 기능이 필요하지 않으므로 아마 다음과 같은 것이 동작할 것 같습니다.
while True:
# 여기에서 실행되는 코드
time.sleep(60)
이 코드에 예상 가능한 문제가 있을까요?
답변
만약 당신의 프로그램에 이미 이벤트 루프가 없다면, 일반적인 용도의 이벤트 스케줄러를 구현한 sched 모듈을 사용하세요.
import sched, time
def do_something(scheduler):
# 다음 호출을 먼저 스케줄에 등록
scheduler.enter(60, 1, do_something, (scheduler,))
print("작업 수행 중...")
# 그리고 작업을 수행하세요
my_scheduler = sched.scheduler(time.time, time.sleep)
my_scheduler.enter(60, 1, do_something, (my_scheduler,))
my_scheduler.run()
만약 이미 asyncio
, trio
, tkinter
, PyQt5
, gobject
, kivy
등과 같은 이벤트 루프 라이브러리를 사용하고 있다면, 기존의 이벤트 루프 라이브러리의 메소드를 사용하여 작업을 스케줄하세요.
반응형
댓글