cron을 interval로 수정. cron은 xx시 1분마다 수행하고 interval은 1분마다 수행함.
while True
부분 제거함. 다른 블로그를 본 결과 스케쥴러에 포함될 부분이 아니라 메인 프로세스를 나타내기 위한 테스트용 코드였던 듯
참고1
참고2
장고 연결을 위해 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()
도 잘 호출된다.
이제 서버 시작하자마자 실행하는 부분을 해보려고 어제 쓴 코드 그대로 붙여넣었는데 어제는 안떴던 에러가 뜬다. 파이썬 인터프리터 버전 문젠가 싶어서 바꿔봤는데 그건 또 아닌듯.. 파일 이리저리 바꾸고 해봤더니 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초 간격으로 불러오는 중