@maryaTurova

Как получить переменную из процесса threading в запросе flask?

Вообщем вопрос!
Если глобальная переменная меняется в отдельном потоке, то как её получить через flask?
from flask import Flask
from threading import Thread
import time
import random

a='test'

def name():
    while True:
        time.sleep(1)
        letters = 'test'
        a=''.join(random.choice(letters) for i in range(len(letters)))

th = Thread(target=name)
th.start()

app = Flask(__name__)
@app.route("/")
def hello():
    return a
if __name__ == "__main__":
    app.run()
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Потому что в ходе присваивания в name() ты создаешь локальную переменную a, которая перекрывает глобальную.
Есть два решения:
1. Простое: вставить в начало name() строку global a, чтобы работать с глобальной переменной
2. Правильное: обернуть поток в класс, и работать с его экземплярной переменной вместо глобальной.

К слову, при запуске потока добавь daemon=True, иначе твой поток не даст завершить работу сервера (он же while True).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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