Eventlet is deprecated and broken with trio
- Dominant language
- TypeScript
- Stars
- 10.4k
- Forks
- 521
- PR merge metrics
- No merged PRs in 30d
Description
**Describe the bug**
If I have `eventlet` and `trio` installed then `gdbgui` breaks with:
```
Traceback (most recent call last):
File "/usr/bin/gdbgui", line 33, in
sys.exit(load_entry_point('gdbgui==0.15.3.0', 'console_scripts', 'gdbgui')())
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.14/site-packages/gdbgui/cli.py", line 249, in main
run_server(
~~~~~~~~~~^
app=app,
^^^^^^^^
...<7 lines>...
certificate=args.cert,
^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/lib/python3.14/site-packages/gdbgui/server/server.py", line 68, in run_server
socketio.init_app(app)
~~~~~~~~~~~~~~~~~^^^^^
File "/usr/lib/python3.14/site-packages/flask_socketio/__init__.py", line 257, in init_app
self.server = socketio.Server(**self.server_options)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/socketio/base_server.py", line 34, in __init__
self.eio = self._engineio_server_class()(**engineio_options)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/engineio/base_server.py", line 83, in __init__
self._async = importlib.import_module(
~~~~~~~~~~~~~~~~~~~~~~~^
'engineio.async_drivers.' + mode)._async
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/importlib/__init__.py", line 88, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 1406, in _gcd_import
File "", line 1371, in _find_and_load
File "", line 1342, in _find_and_load_unlocked
File "", line 938, in _load_unlocked
File "", line 759, in exec_module
File "", line 491, in _call_with_frames_removed
File "/usr/lib/python3.14/site-packages/engineio/async_drivers/eventlet.py", line 1, in
from eventlet.green.threading import Event
File "/usr/lib/python3.14/site-packages/eventlet/__init__.py", line 6, in
from eventlet import convenience
File "/usr/lib/python3.14/site-packages/eventlet/convenience.py", line 7, in
from eventlet.green import socket
File "/usr/lib/python3.14/site-packages/eventlet/green/socket.py", line 21, in
from eventlet.support import greendns
File "/usr/lib/python3.14/site-packages/eventlet/support/greendns.py", line 78, in
setattr(dns, pkg, import_patched('dns.' + pkg))
~~~~~~~~~~~~~~^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/eventlet/support/greendns.py", line 60, in import_patched
return patcher.import_patched(module_name, **modules)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/eventlet/patcher.py", line 138, in import_patched
return inject(
module_name, None, *additional_modules + tuple(kw_additional_modules.items())
)
File "/usr/lib/python3.14/site-packages/eventlet/patcher.py", line 115, in inject
module = __import__(module_name, {}, {}, module_name.split(".")[:-1])
File "/usr/lib/python3.14/site-packages/dns/asyncquery.py", line 34, in
import dns.quic
File "/usr/lib/python3.14/site-packages/dns/quic/__init__.py", line 40, in
import trio
File "/usr/lib/python3.14/site-packages/trio/__init__.py", line 25, in
from . import abc, from_thread, lowlevel, socket, to_thread
File "/usr/lib/python3.14/site-packages/trio/socket.py", line 16, in
from . import _socket
File "/usr/lib/python3.14/site-packages/trio/_socket.py", line 546, in
class SocketType:
...<221 lines>...
raise NotImplementedError
File "/usr/lib/python3.14/site-packages/trio/_socket.py", line 759, in SocketType
@_wraps(_stdlib_socket.socket.sendmsg, assigned=(), updated=())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'GreenSocket' has no attribute 'sendmsg'
```
**To Reproduce**
Steps to reproduce the behavior:
1. Have `engineio 4.13.3`, `trio 0.34.0` and `eventlet 0.41.0`
2. Run `gdbgui`
**Expected behavior**
No error :)
**Please complete the following information:**
* OS: Arch Linux
* gdbgui version (`gdbgui -v`): 0.15.3.0
* gdb version (`gdb -v`): 17.2
* browser [e.g. chrome, safari]: firefox
**Additional context**
If I remove `eventlet` or `trio` then it seems to be working fine.
Also this seems to be quite common error with eventlet + trio is just broken, see python-trio/trio#3015 eventlet/eventlet#1075 eventlet/eventlet#1045
Without `trio`
```
$ python -c 'import eventlet'
:1: EventletDeprecationWarning:
Eventlet is deprecated. It is currently being maintained in bugfix mode, and
we strongly recommend against using it for new projects.
If you are already using Eventlet, we recommend migrating to a different
framework. For more detail see
https://eventlet.readthedocs.io/en/latest/asyncio/migration.html
```
Contributor guide
Research direction
Start at gdbgui/cli.py where main calls run_server, then inspect gdbgui/server/server.py around socketio.init_app. Reproduce with engineio 4.13.3, trio 0.34.0, and eventlet 0.41.0, and compare behavior when either conflicting package is removed. Done means gdbgui starts successfully with both packages installed without regressing its server behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend, cli
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100