Фоновая очистка веб-страниц и обновление базы данных

Моему приложению 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 из другого рабочего каталога, чем тот, в котором я выполнял фоновый рабочий. Это заставило рабочее приложение создать свою собственную базу данных, поэтому два приложения фактически работали с отдельными базами данных.

Таким образом, решение состояло в том, чтобы убедиться, что все они запускаются из одного каталога.

Другие вопросы по тегам