【翻译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:
所以尝试用gevent替代
pip install gevent
celery -A <module> worker -l info -P gevent
它在Windows 10+celery 4.2+python 3有用。