[Django] 특정 주기마다 API 호출하고 서버 시작하자마자 실행하기 (2)

김재연·2022년 3월 24일
0

BEMS 날씨

목록 보기
3/5

코드 수정

  1. cron을 interval로 수정. cron은 xx시 1분마다 수행하고 interval은 1분마다 수행함.

  2. while True 부분 제거함. 다른 블로그를 본 결과 스케쥴러에 포함될 부분이 아니라 메인 프로세스를 나타내기 위한 테스트용 코드였던 듯
    참고1
    참고2

  3. 장고 연결을 위해 index.html 추가

# api/views.py
from apscheduler.schedulers.background import BackgroundScheduler
import time
from .weather_api import check_weather

def job():
    print(f'******{time.strftime("%H:%M:%S")}******')
    check_weather()
    print("************************")

def cron_weather():
    sched = BackgroundScheduler()
    # interval - 일정주기로 수행(테스트용 5초)
    sched.add_job(job, 'interval', seconds=5, id='cron_weather')
    sched.start()

def index(request):
    return render(request, 'index.html')

cron_weather()
# urls.py
from api import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index')
]

runserver를 돌린 결과 127.0.0.1:8000에 index.html 도 잘 나오고 cron_weather() 도 잘 호출된다.


ERROR

이제 서버 시작하자마자 실행하는 부분을 해보려고 어제 쓴 코드 그대로 붙여넣었는데 어제는 안떴던 에러가 뜬다. 파이썬 인터프리터 버전 문젠가 싶어서 바꿔봤는데 그건 또 아닌듯.. 파일 이리저리 바꾸고 해봤더니 broker.py 에 따로 넣으니까 돼서 이리저리 넣고 빼고 하다가 됐다. 함수 임포트도 잘 안되고.. 사실 이유는 아직도 모르겠다.


코드

# api/broker.py
from django.apps import AppConfig
from .weather_api import check_weather
from apscheduler.schedulers.background import BackgroundScheduler
import time

def job():
    print(f'******{time.strftime("%H:%M:%S")}******')
    check_weather()
    print("************************")

def cron_weather():
    sched = BackgroundScheduler()
    # interval - 일정주기로 수행(테스트용 10초)
    sched.add_job(job, 'interval', seconds=10, id='cron_weather')
    sched.start()

class WeatherConfig(AppConfig):
    name = 'api' # 여기 아무 이름 막쓰는게 아니라 내가 만든 앱이름 써야함!!!!!!!!!!!
    verbose_name = "WeatherConfig"
    def ready(self):
        cron_weather()
# api/__init__.py
default_app_config = 'api.broker.WeatherConfig'
# api/views.py
# 이것만 남겨두고 모두 broker.py로 옮김
def index(request):
    return render(request, 'index.html')

실행결과

127.0.0.1:8000 페이지에 아직 안들어갔는데도 runserver 하니까 알아서 API 호출이 되고 있다. 지금은 10초 간격으로 불러오는 중

profile
일기장같은 공부기록📝

0개의 댓글