环境
windows 11
python 3.13
celery 5.5.0
背景
调用celery任务时报错
Traceback (most recent call last):
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload
return self._reader.recv_bytes()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes
buf = self._recv_bytes(maxlength)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\connection.py", line 351, in _recv_bytes
return self._get_more_data(ov, maxsize)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\connection.py", line 371, in _get_more_data
assert left > 0
^^^^^^^^
AssertionError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 473, in receive
ready, req = _receive(1.0)
^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 445, in _recv
return True, loads(get_payload())
^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload
with self._rlock:
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__
return self._semlock.__exit__(*args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [WinError 6] 句柄无效。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 351, in workloop
req = wait_for_job()
^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 480, in receive
raise SystemExit(EX_FAILURE)
SystemExit: 1
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 292, in __call__
sys.exit(self.workloop(pid=pid))
^^^^^^^^^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 396, in workloop
self._ensure_messages_consumed(completed=completed)
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed
if self.on_ready_counter.value >= completed:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<string>", line 3, in getvalue
PermissionError: [WinError 5] 拒绝访问。
[2025-04-02 11:16:54,587: ERROR/SpawnPoolWorker-1] Pool process <billiard.pool.Worker object at 0x000002205AA1B450> error: PermissionError(13, '拒绝访问。', None, 5, None)
Traceback (most recent call last):
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload
return self._reader.recv_bytes()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes
buf = self._recv_bytes(maxlength)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\connection.py", line 351, in _recv_bytes
return self._get_more_data(ov, maxsize)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\connection.py", line 371, in _get_more_data
assert left > 0
^^^^^^^^
AssertionError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 473, in receive
ready, req = _receive(1.0)
^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 445, in _recv
return True, loads(get_payload())
^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload
with self._rlock:
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__
return self._semlock.__exit__(*args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [WinError 6] 句柄无效。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 351, in workloop
req = wait_for_job()
^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 480, in receive
raise SystemExit(EX_FAILURE)
SystemExit: 1
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 292, in __call__
sys.exit(self.workloop(pid=pid))
^^^^^^^^^^^^^^^^^^^^^^
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 396, in workloop
self._ensure_messages_consumed(completed=completed)
File "D:\code\PythonProject\fastapi-demo\.venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed
if self.on_ready_counter.value >= completed:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<string>", line 3, in getvalue
PermissionError: [WinError 5] 拒绝访问。
[2025-04-02 11:16:55,165: ERROR/MainProcess] Process 'SpawnPoolWorker-1' pid:8132 exited with 'exitcode 1'
[2025-04-02 11:16:55,403: INFO/SpawnPoolWorker-17] child process 10012 calling self.run()
解决方法
安装 gevent
pip install gevent
然后进入文件目录下,执行命令:
celery -A celery_app worker -l info -P gevent
控制台输出: