Как обновлять содержимое страницы, получаемое парсингом другой страницы в Flask?

Есть базовый код Flask, типа такого:

from flask import Flask
from test import text

app = Flask(__name__)

@app.route('/')
def main_page():
    return text

if __name__ == '__main__':
    app.run()


И есть модуль, который парсит содержимое страницы в интернете, например:
from bs4 import BeautifulSoup
import urllib.request

x = urllib.request.urlopen('http://www.example.com')
soup = BeautifulSoup(x)
text = str(soup.body.p)


Мне нужно сделать так, чтобы с некоторым интервалом переменная text обновлялась (т.е. постоянно парсилась страница и результат был доступен для отображения на моем сервере Flask'ом).

Но у меня получается так, что переменная text в модуле парсится один раз, и страница на моем сервере всегда отображает то, что было спарсено один раз.

Не понимаю как мне сделать так, чтобы переменная text парсилась с интервалом времени и была доступна для обработки скриптом Flaska.

Не знаю в какую сторону гуглить.
  • Вопрос задан
  • 2780 просмотров
Решения вопроса 1
Tark
@Tark
Pyramid'альный мир
Вариант первый, не очень хороший:
from flask import Flask
import test  # именно так

app = Flask(__name__)

@app.route('/')
def main_page():
    # постоянно актуальная информация, даже если переменная изменится в другом месте
    return test.text

if __name__ == '__main__':
    app.run()

Это плохо тем, что работать будет только с одним воркером. То есть если у вас uwsgi, скажем, с двумя процессами, то часть запросов будет попадать на "старое" значение test.text. Если принудительно работать с одним воркером, будет работать правильно.

Вариант второй, получше: использовать кеш или БД.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы