프로그래밍/python
python apscheduler BackgroundScheduler start specific times
콘솔워크
2022. 10. 13. 14:54
반응형
python을 이용하여 apscheduler를 쓰는데, 특정 시간 대에만 스케쥴 작업이 필요하였다.
add_job을 여러개 등록하면, 랜덤하게 시작되는 현상이 있어서
add_job에 CronTrigger를 여러개 등록하는 방식으로 하니까 잘 되었다.
CronTrigger들은 OrTrigger로 묶어서 진행하면 된다.
from apscheduler.triggers.combining import OrTrigger
from apscheduler.triggers.cron import CronTrigger
from apscheduler.schedulers.background import *
class Thread30min(QThread):
def __init__(self):
super().__init__()
self.scheduler = BackgroundScheduler(timezone="Asia/Seoul")
self.scheduler.start()
self.isStartNow = False
self.is_reserve_run = True
self.threadId = "upload_30min"
def addReserveJob(self):
triggers = OrTrigger(
[
CronTrigger(day_of_week="mon-fri", hour=8, minute=30),
CronTrigger(day_of_week="mon-fri", hour=9, minute=30),
CronTrigger(day_of_week="mon-fri", hour=11, minute=30),
CronTrigger(day_of_week="mon-fri", hour=12, minute=0),
CronTrigger(day_of_week="mon-fri", hour=15, minute=0),
CronTrigger(day_of_week="mon-fri", hour=15, minute=30),
]
)
self.scheduler.add_job(
self.startJobs,
triggers,
id=self.threadId,
)
while self.is_reserve_run:
time.sleep(1)
def startJobs(self):
self.log_msg.emit("startJobs")
def stop(self):
self.is_reserve_run = False
try:
self.scheduler.remove_job(self.threadId)
except:
pass
try:
self.terminate()
except Exception as e:
print(e)
반응형