^C[2026-02-02 17:54:32,127: CRITICAL/MainProcess] Unrecoverable error: RuntimeError('do not call blocking functions from the mainloop')
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/celery/worker/worker.py", line 203, in start
self.blueprint.start(self)
File "/usr/local/lib/python3.9/site-packages/celery/bootsteps.py", line 116, in start
step.start(parent)
File "/usr/local/lib/python3.9/site-packages/celery/bootsteps.py", line 365, in start
return self.obj.start()
File "/usr/local/lib/python3.9/site-packages/celery/worker/consumer/consumer.py", line 346, in start
blueprint.start(self)
File "/usr/local/lib/python3.9/site-packages/celery/bootsteps.py", line 116, in start
step.start(parent)
File "/usr/local/lib/python3.9/site-packages/celery/worker/consumer/consumer.py", line 788, in start
c.loop(*c.loop_args())
File "/usr/local/lib/python3.9/site-packages/celery/worker/loops.py", line 136, in synloop
_loop_cycle()
File "/usr/local/lib/python3.9/site-packages/celery/worker/loops.py", line 125, in _loop_cycle
connection.drain_events(timeout=2.0)
File "/usr/local/lib/python3.9/site-packages/kombu/connection.py", line 343, in drain_events
return self.transport.drain_events(self.connection, **kwargs)
File "/usr/local/lib/python3.9/site-packages/kombu/transport/pyamqp.py", line 171, in drain_events
return connection.drain_events(**kwargs)
File "/usr/local/lib/python3.9/site-packages/amqp/connection.py", line 526, in drain_events
while not self.blocking_read(timeout):
File "/usr/local/lib/python3.9/site-packages/amqp/connection.py", line 531, in blocking_read
frame = self.transport.read_frame()
File "/usr/local/lib/python3.9/site-packages/amqp/transport.py", line 297, in read_frame
frame_header = read(7, True)
File "/usr/local/lib/python3.9/site-packages/amqp/transport.py", line 632, in _read
s = recv(n - len(rbuf))
File "/usr/local/lib/python3.9/site-packages/eventlet/greenio/base.py", line 352, in recv
return self._recv_loop(self.fd.recv, b'', bufsize, flags)
File "/usr/local/lib/python3.9/site-packages/eventlet/greenio/base.py", line 346, in _recv_loop
self._read_trampoline()
File "/usr/local/lib/python3.9/site-packages/eventlet/greenio/base.py", line 314, in _read_trampoline
self._trampoline(
File "/usr/local/lib/python3.9/site-packages/eventlet/greenio/base.py", line 206, in _trampoline
return trampoline(fd, read=read, write=write, timeout=timeout,
File "/usr/local/lib/python3.9/site-packages/eventlet/hubs/__init__.py", line 157, in trampoline
return hub.switch()
File "/usr/local/lib/python3.9/site-packages/eventlet/hubs/hub.py", line 310, in switch
return self.greenlet.switch()
File "/usr/local/lib/python3.9/site-packages/eventlet/hubs/hub.py", line 362, in run
self.wait(sleep_time)
File "/usr/local/lib/python3.9/site-packages/eventlet/hubs/poll.py", line 80, in wait
presult = self.do_poll(seconds)
File "/usr/local/lib/python3.9/site-packages/eventlet/hubs/epolls.py", line 31, in do_poll
return self.poll.poll(seconds)
File "/usr/local/lib/python3.9/site-packages/celery/apps/worker.py", line 300, in _handle_request
callback(worker)
File "/usr/local/lib/python3.9/site-packages/celery/apps/worker.py", line 448, in on_SIGINT
safe_say('worker: Hitting Ctrl+C again will initiate cold shutdown, terminating all running tasks!',
File "/usr/local/lib/python3.9/site-packages/celery/apps/worker.py", line 82, in safe_say
os.write(f.fileno(), f'\n{msg}\n'.encode())
File "/usr/local/lib/python3.9/site-packages/eventlet/green/os.py", line 74, in write
hubs.trampoline(fd, write=True)
File "/usr/local/lib/python3.9/site-packages/eventlet/hubs/__init__.py", line 139, in trampoline
raise RuntimeError('do not call blocking functions from the mainloop')
RuntimeError: do not call blocking functions from the mainloop
Checklist
mainbranch of Celery.contribution guide
on reporting bugs.
for similar or identical bug reports.
for existing proposed fixes.
to find out if the bug was already fixed in the main branch.
in this issue (If there are none, check this box anyway).
Mandatory Debugging Information
celery -A proj reportin the issue.(if you are not able to do this, then at least specify the Celery
version affected).
mainbranch of Celery.pip freezein the issue.to reproduce this bug.
Optional Debugging Information
and/or implementation.
result backend.
broker and/or result backend.
ETA/Countdown & rate limits disabled.
and/or upgrading Celery and its dependencies.
Related Issues and Possible Duplicates
Related Issues
Possible Duplicates
Environment & Settings
Celery version:
celery reportOutput:Steps to Reproduce
Required Dependencies
Python Packages
pip freezeOutput:Other Dependencies
Details
eventlet>=0.37.0
Minimally Reproducible Test Case
In #9222 print was changed to os.write.
Eventlet in release 0.37.0 changed logic of os.read/write https://github.com/eventlet/eventlet/pull/975/changes.
This combination leads to exception during "warm shutdown"
Details
RunExpected Behavior
Details
No exception. Same as for prefork(for example)Actual Behavior
Details