Skip to content

Commit

Permalink
Use the gevent selector to avoid 1024 limitation of select() (Fixes #228
Browse files Browse the repository at this point in the history
)
  • Loading branch information
miguelgrinberg committed Jun 13, 2021
1 parent 6daf0d1 commit 6a4fd58
Showing 1 changed file with 10 additions and 12 deletions.
22 changes: 10 additions & 12 deletions src/engineio/async_drivers/gevent_uwsgi.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from __future__ import absolute_import

import gevent
from gevent import queue
from gevent.event import Event
from gevent import selectors
import uwsgi
_websocket_available = hasattr(uwsgi, 'websocket_handshake')

Expand Down Expand Up @@ -40,21 +39,20 @@ def __call__(self, environ, start_response):
self._req_ctx = uwsgi.request_context()
else:
# use event and queue for sending messages
from gevent.event import Event
from gevent.queue import Queue
from gevent.select import select
self._event = Event()
self._send_queue = Queue()
self._send_queue = queue.Queue()

# spawn a select greenlet
def select_greenlet_runner(fd, event):
"""Sets event when data becomes available to read on fd."""
while True:
event.set()
try:
select([fd], [], [])[0]
except ValueError:
break
sel = selectors.DefaultSelector()
sel.register(fd, selectors.EVENT_READ)
try:
while True:
sel.select()
event.set()
except gevent.GreenletExit:
sel.unregister(fd)
self._select_greenlet = gevent.spawn(
select_greenlet_runner,
self._sock,
Expand Down

1 comment on commit 6a4fd58

@johaven
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This patch has introduced a regression, see: miguelgrinberg/Flask-SocketIO#1681

Please sign in to comment.