Search code examples
pythonflaskwebsocketgeventflask-socketio

Flask SocketIO + Gevent - buffering events from external processes


I want to send socket from asynchronous class in my Flask project. But when I send it, it takes enormous time before it arrives to JavaScript. I am sending it as:

socket_io.emit("event_name", {"foo": "bar"}, broadcast=True, namespace="/com")

App with socketio is initialised as:

app = Flask(__name__, template_folder="templates", static_folder="static", static_url_path="/static")
socketio = SocketIO(app=app, cookie="cookie_name", async_mode=None)

And it is started by this command:

socketio.run(app=app, host="0.0.0.0", port=5000, log_output=False)

My Python library versions are:

# Python == 3.8.5
Flask==1.1.2
Flask-SocketIO==5.0.1
python-engineio==4.0.0
python-socketio==5.04
gevent==20.12.1
gevent-websocket==0.10.1

JavaScript SocketIO: v3.0.4

When I send socket normally by emit command in socket_io handler, it works ok. But when I want to send same socket from external process, it takes a long time.

Does anyone know, how can I solve this problem? Thank you


Solution

  • The problem was with monkey patching and 32-bit Python3. I must install 64-bit Python3 and then add this at the first line:

    import gevent.monkey; gevent.monkey.patch_all()