Celery引发了ValueError:没有足够的值来解压缩

Igo*_*aev 8 python celery

尝试使用Celery运行简单示例并接收异常.RabbitMQ在Docker中启动,也尝试在本地启动它.Celery可在本地Windows主机上运行

from celery import Celery

app = Celery('tasks', broker='amqp://192.168.99.100:32774')

@app.task()
def hello():
    print('hello')


if __name__ == '__main__':
    hello.delay()
Run Code Online (Sandbox Code Playgroud)

我的错误文字的摘录:

[2017-08-18 00:01:08,628: INFO/MainProcess] Received task: tasks.hello[8d33dbea-c5d9-4938-ab1d-0646eb1a3858] [2017-08-18 00:01:08,632: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',) Traceback (most recent call last): File "c:\users\user\celenv\lib\site-packages\billiard\pool.py", line 358, in workloop result = (True, prepare_result(fun(*args, **kwargs))) File "c:\users\user\celenv\lib\site-packages\celery\app\trace.py", line 525, in _fast_trace_task tasks, accept, hostname = _loc ValueError: not enough values to unpack (expected 3, got 0)

Sam*_*hen 37

Celery 4.0+尚未正式支持Windows.但它仍可在Windows上用于某些开发/测试目的.

eventlet改为使用如下:

pip install eventlet
celery -A <module> worker -l info -P eventlet
Run Code Online (Sandbox Code Playgroud)

它适用于Windows 10+ celery 4.1+ python 3.

=====更新2018-11 =====

Eventlet在subprocess.CalledProcessError上有一个问题:

https://github.com/celery/celery/issues/4063

https://github.com/eventlet/eventlet/issues/357

https://github.com/eventlet/eventlet/issues/413

所以试试吧gevent.

pip install gevent
celery -A <module> worker -l info -P gevent
Run Code Online (Sandbox Code Playgroud)

这适用于Windows 10+ celery 4.2+python 3.6

  • 这应该是选择答案 (4认同)

小智 11

我在 Windows 7 32 位系统上遇到此错误。所以我这样做是为了让它工作。

添加这个

`os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')` 
Run Code Online (Sandbox Code Playgroud)

在定义 celery 实例之前 myproj/settings.pydjango 项目的文件中。

它应该喜欢

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproj.settings')
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')

app = Celery('tasks', broker='redis://127.0.0.1:6379/0')
Run Code Online (Sandbox Code Playgroud)

我使用 redis 作为如此定义的消息传递代理 broker='redis://127.0.0.1:6379/0'


Bob*_*dan 9

对于Celery 4.1Windows。

设置环境变量FORKED_BY_MULTIPROCESSING=1。然后你可以简单地运行celery -A <celery module> worker.


Mbe*_*reL 7

它对我有用:

celery -A my_project_name worker --pool=solo -l info
Run Code Online (Sandbox Code Playgroud)

基本上事情变成单线程并且被支持

  • 2022 年 11 月 29 日它仍然有效。谢谢。 (2认同)

Ita*_*ayB 6

哪个芹菜版本?据我所知,自芹菜 4 以来,Windows 不支持芹菜