Flask / Архитектура UWSGI с рабочим потоком - PullRequest
1 голос
/ 08 июля 2020

Следующий код приблизительно соответствует реальному коду. Flask приложение при запуске создает рабочий поток. Функция маршрутизации использует обработку данных, выполняемую рабочей функцией.

app = Flask(__name__)

timeStr=""

def loop ():
        global timeStr
        while  True:
                time.sleep (2)
                timeStr =datetime.now().replace(microsecond=0).isoformat()
                print (timeStr)


ThreadID = Thread (target=loop)
ThreadID.daemon = True
ThreadID.start()

@app.route('/')
def test():
    return   os.name + " " + platform.platform() + " " + timeStr

application=app

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080, debug=True)

Вышеупомянутое приложение прекрасно работает в течение нескольких дней после запуска, например:

python3 app.py 

Однако в uwsgi, хотя я включил потоки , приложение не работает. Он не обновляет global timeStr

sudo /usr/local/bin/uwsgi --wsgi-file /home/pi/pyTest/app.py   --http :80 --touch-reload /home/pi/pyTest/app.py  --enable-threads --stats 127.0.0.1:9191

Что мне нужно сделать, чтобы приложение работало правильно под UWSGI, чтобы я правильно создал службу systemd?

1 Ответ

0 голосов
/ 09 июля 2020

Плохие новости, хорошие новости.

У меня есть приложение, которое запускает рабочий поток примерно таким же образом. Он использует queue.Queue, чтобы маршруты передавали работу рабочему потоку. Приложение успешно работает на моем домашнем intr anet (на Rapsberry Pi) с использованием сервера разработки Flask. Я попытался поместить свое приложение за uwsgi и обнаружил тот же сбой - рабочий поток, похоже, не был запланирован. Поток сообщил как _is_alive = True, но я не смог найти комбинацию переключателей uwsgi, которая позволяла бы ему работать.

Использование gunicorn решило проблему.

virtualenv venv --python=python3
. venv/bin/activate
pip install flask gunicorn
gunicorn -b 0.0.0.0:5000 demo:app

было достаточно, чтобы мое приложение заработало (это означает, что рабочий поток действительно запущен, и побочные эффекты были заметны).

...