尝试使用 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:usersusercelenvlibsite-packagesbilliardpool.py", line 358, in workloop
result = (True, prepare_result(fun(*args, **kwargs)))
File "c:usersusercelenvlibsite-packagesceleryapptrace.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
上对我有用。
===== 更新 2018-11 =====
事件在子进程上存在问题。调用进程错误:
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
这适用于我Windows 10
+celery 4.2
+python 3.6
它对我有用:
celery -A my_project_name worker --pool=solo -l info
基本上事情变得单线程并得到支持
我在Windows 7 32位系统上收到此错误。所以我这样做是为了让它工作。
添加此
`os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')`
在 Django 项目中myproj/settings.py
文件中定义 Celery 实例之前。
它应该像
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')
我正在使用 redis 作为消息传递代理,因此定义broker='redis://127.0.0.1:6379/0'
用于Windows上的Celery 4.1
。
设置环境变量FORKED_BY_MULTIPROCESSING=1
。然后你可以简单地运行celery -A <celery module> worker
.
哪个芹菜版本?据我所知,自芹菜 4 以来,窗口中不支持芹菜
运行此命令
芹菜 -A name_of_project工人 --pool=solo -l 信息