Фоновая очистка веб-страниц и обновление базы данных
Моему приложению Flask необходимо очистить другую веб-страницу, чтобы обновлять информацию о базе данных каждую минуту или около того. Поэтому я сделал фоновое задание, чтобы выполнить эту работу, но, к сожалению, похоже, что он на самом деле не изменяет базу данных, молча проваливаясь.
У меня есть соединение с базой данных, которое выглядит так:
config.py:
class Configuration(object):
DATABASE = {
'name': 'database.db',
'engine': 'peewee.SqliteDatabase',
'check_same_thread': False,
}
__ init __.py:
import flask
app = flask.Flask(__name__)
from flask_peewee.db import Database
app.config.from_object('config.Configuration')
db = Database(app)
А затем я читаю / пишу записи базы данных в функциях @app.route(). Вот фоновая задача, scrape.py
:
from myapp import *
db.connect_db()
while True:
#scrape and update the database with commands similar to:
user = User.get(id=5)
user.value += 1
user.save()
Код работает, когда я добавляю его к остальным своим представлениям, например:
@app.route("/scrape")
def scrape_update_db():
user = User.get(id=5)
user.value += 1
user.save()
return "Done"
и затем периодически направляю мой веб-браузер в / scrape. Так что я мог бы вместо этого сделать фоновую задачу, которая просто соединяется с http://localhost:80/scrape
каждую минуту. Но это кажется довольно запутанным, и я полагаю, что это не будет столь же вычислительно эффективным (сервер работает на слабом оборудовании) или обслуживаемым.
Как я могу обновить записи базы данных в фоновом режиме?
1 ответ
Итак, мое приложение содержит код, который автоматически создает базу данных / таблицы, если она пуста. Оказывается, что Apache/WSGI запускал приложение Flask из другого рабочего каталога, чем тот, в котором я выполнял фоновый рабочий. Это заставило рабочее приложение создать свою собственную базу данных, поэтому два приложения фактически работали с отдельными базами данных.
Таким образом, решение состояло в том, чтобы убедиться, что все они запускаются из одного каталога.