콘솔워크

python apscheduler BackgroundScheduler start specific times 본문

프로그래밍/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)
반응형