Celery raises ValueError: not enough values to unpack

478 阅读1分钟

【翻译Stack Overflow的《Celery raises ValueError: not enough values to unpack》】 尝试使用 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()

我的错误文本摘录:

[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)

解决方案

Celery 4.0+尚未正式支持 Windows。但出于某些开发/测试目的,它仍然适用于 Windows。 eventlet改为使用如下:

pip install eventlet
celery -A <module> worker -l info -P eventlet

它在Windows 10+celery 4.1+python 3有用。 ===== update 2018-11 =====

Eventlet has an issue on subprocess.CalledProcessError:

github.com/celery/cele…

github.com/eventlet/ev…

github.com/eventlet/ev…

所以尝试用gevent替代

pip install gevent
celery -A <module> worker -l info -P gevent

它在Windows 10+celery 4.2+python 3有用。