Job Scheduler - pai-plznw4me/django-initializer GitHub Wiki

Django job scheduler

  • ์ผ์ • ์ฃผ๊ธฐ๋กœ ์ •ํ•ด์ง„ python ํ•จ์ˆ˜๋ฅผ ์ž‘๋™ ์‹œํ‚ค๋Š” ์ž‘์—…์„ job ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ฃผ๊ธฐ

์ฃผ๊ธฐ๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด ์ง„๋‹ค.

  1. ์ผ์ • ์ฃผ๊ธฐ๋กœ ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
  2. ์ผ์ • ์‹œ๊ฐ„์— ์‹คํ–‰ ํ•˜๋Š” ๊ฒƒ.

์ผ์ • ์ฃผ๊ธฐ ์ƒ์„ฑํ•˜๊ธฐ

1. django application ๋“ฑ๋ก

AppConfig.ready ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด ์Šค์ผ€์ฅด๋ง ์ž‘์—…์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • 1.1 app์ด ์‹œ์ž‘ํ•˜๋ฉด ready ํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.
  • 1.2 ready ํ•จ์ˆ˜๋‚ด start ํ•จ์ˆ˜๊ฐ€ ์‹œ์ž‘๋œ๋‹ค.
  • 1.3 BackgroundScheduler ์ƒ์„ฑ
  • 1.4 job ์ถ”๊ฐ€
  • 1.5 scheduler ์‹œ์ž‘
# migrations/apps.py
from django.apps import AppConfig
from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime


class MainAppConfig(AppConfig):
    name = 'interval'

    def ready(self):
        print("this is Django-apps.py ready function()")
        self.start()

    def start(self):
        def schedule_api():
            timeZone = datetime.now()
            print(" Every 10 seconds this executed")
            print(" Now : %s" % timeZone.second)
            print("This is SCHEDULER APPS PROCESSING")

        print("jobs.updater.jobs")
        # 1. ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
        scheduler = BackgroundScheduler()
        # 2. ์Šค์ผ€์ฅด๋Ÿฌ๊ฐ€ ์ˆ˜ํ–‰ํ•  ์žก(job) ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
        scheduler.add_job(schedule_api, 'cron', second=10)
        # scheduler.add_job(schedule_api, 'interval', seconds=10) <-- interval ์‹คํ–‰์‹œ ์•„๋ž˜ ์ฝ”๋“œ ์ˆ˜ํ–‰ 
        # 3. ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
        scheduler.start()

์ฃผ์˜ ํ• ์ 

  • job scheduler ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ๋งŒ ์ž‘๋™ ํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.
  • django ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์–ด์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๋„์–ด์„œ ์ž‘๋™ํ•˜๋„๋ก ์„ค์ • ํ•ด์•ผ ํ•œ๋‹ค.
    ๊ฐ€๋Šฅํ•˜๋ฉด job scheduler ์„œ๋ฒ„๋Š” ๊ธฐ์กด ์„œ๋ฒ„์™€ ๋ถ„๋ฆฌํ•ด ๊ตฌ์„ฑํ•˜๋„๋ก ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.