Flask SocketIO выполняет один запрос за раз - PullRequest
0 голосов
/ 12 марта 2020

Мое простое flask приложение socketIO, но за один раз только метод выполняет метод write_message. Я использую eventlet (https://eventlet.net/), который согласно документации может обрабатывать параллельные запросы.

socketio = SocketIO(app)

@socketio.on('write-message', namespace='/message') 
def write_message(data):
    //long task

if __name__ == '__main__':
    print("Starting socket app on port 5000")
    socketio.run(app, host='0.0.0.0', port=5000)

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

То, что вы делаете в этой длинной задаче, на самом деле является ключевым здесь. Eventlet - это интегрированная многозадачная инфраструктура, поэтому вам нужно, чтобы каждая задача высвобождала процессор, чтобы другие задачи могли выполняться. Если ваша длинная задача не освобождает ЦП, никакие другие задачи не смогут выполняться одновременно.

Распространенный способ освободить ЦП в длинной задаче с помощью eventlet - часто вызывать socketio.sleep(0). Добавьте это в свой l oop, если это то, что у вас есть в вашей длинной задаче.

0 голосов
/ 12 марта 2020
you can use gunicorn gevent to serve socket application . as per documentation.

"gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 module:app"


https://flask-socketio.readthedocs.io/en/latest/ 
...