Я пытаюсь запустить мой код flask как запланированное задание с интервалом в несколько минут. Приложение в основном выполняет Webscraping новостей с нескольких сайтов и отображает их в виде HTML веб-страницы.
Когда я планирую свою функцию Flask, используя apscheduler , я получаю следующее сообщение об ошибке:
Job "news_page (trigger: interval[0:02:00], next run at: 2020-03-11 17:54:32 IST)" raised an exception
Traceback (most recent call last):
File "C:\Users\poudupa\PycharmProjects\SecNews\venv\lib\site-packages\apscheduler\executors\base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
File "C:\Users\poudupa\PycharmProjects\SecNews\venv\Scripts\try_flask.py", line 20, in news_page
return render_template('news_screen.html', hackernews = hackernews, bcnews = bcnews, tpnews = tpnews, nsnews = nsnews, drnews = drnews, wsnews = wsnews)
File "C:\Users\poudupa\PycharmProjects\SecNews\venv\lib\site-packages\flask\templating.py", line 136, in render_template
ctx.app.update_template_context(context)
AttributeError: 'NoneType' object has no attribute 'app'
Вот мой код Flask:
from flask import Flask, request, render_template
from pullnews import *
from apscheduler.schedulers.background import BackgroundScheduler
import datetime
app = Flask(__name__)
app.debug=True
class Item:
def __init__(self, vals):
self.__dict__ = vals
@app.route('/')
def news_page():
hackernews = get_hackernews()
bcnews = get_bcnews()
tpnews = get_threatpost()
nsnews = get_nakedsecurity()
drnews = get_darkreading()
wsnews = get_welivesecurity()
return render_template('news_screen.html', hackernews = hackernews, bcnews = bcnews, tpnews = tpnews, nsnews = nsnews, drnews = drnews, wsnews = wsnews)
sched = BackgroundScheduler(daemon=True)
sched.add_job(news_page, 'interval', minutes=2)
sched.start()
if __name__ == '__main__':
app.run()
Как мне устранить эту ошибку? Этого не происходит, когда я вручную запускаю код Flask без задания планировщика.