Бегущий оружейный с нарезкой - PullRequest
0 голосов
/ 23 апреля 2020

Я создаю сервер с помощью Flask / Gunicorn и Nginx. Мой сценарий (Flask сервер) выполняет две функции с использованием потоков:

  1. подключается к MQTT-брокеру
  2. запускает flask сервер

Но когда я пытаюсь использовать gunicorn: gunicorn --bind 0.0.0.0:5000 wsgi: app , первый поток не запускается.

Вот код (не завершенный):

import threading

def run_mqtt():
    while True:
        mqtt_client.connect(mqtt_server, port=mqtt_port)

def run_server():
    app.run(host='0.0.0.0', port=5000, debug=False)



if __name__ == '__main__':
    t1 = threading.Thread(target=run_mqtt)
    t2 = threading.Thread(target=run_server)
    t1.daemon = True
    t2.daemon = True
    t1.start()
    t2.start()

Пожалуйста, помогите мне, я должен найти решение очень быстро! Спасибо !!

1 Ответ

0 голосов
/ 24 апреля 2020

Gunicorn основан на предварительной рабочей модели. Это означает, что когда он запускается, он имеет главный процесс и порождает рабочие процессы по мере необходимости. Скорее всего, первый поток запустился, но вы потеряли его в других процессах prefork.

Если вы хотите иметь фоновый поток, с которым контроллеры flask могут взаимодействовать и совместно использовать память, маловероятно, что Gunicorn - хорошее решение для вас.

...