解决celery框架报错:OSError: [WinError 6] 句柄无效、PermissionError: [WinError 5] 拒绝访问

环境

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

控制台输出:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值