尝试使用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,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)
答案 0 :(得分:27)
driver.switch_to_default_content()
尚未正式支持Windows。但它仍可在Windows上用于某些开发/测试目的。
使用Celery 4.0+
代替如下:
eventlet
它适用于我pip install eventlet
celery -A <module> worker -l info -P eventlet
+ Windows 10
+ celery 4.1
。
=====更新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
请改为尝试python 3
。
gevent
这适用于pip install gevent
celery -A <module> worker -l info -P gevent
+ Windows 10
+ celery 4.2
答案 1 :(得分:3)
对我有用:
celery -A my_project_name worker --pool=solo -l info
基本上,事情变成了单线程并被支持
答案 2 :(得分:2)
答案 3 :(得分:2)
适用于Windows上的Celery 4.1
。
设置环境变量FORKED_BY_MULTIPROCESSING=1
。然后,您只需运行celery -A <celery module> worker
即可。
答案 4 :(得分:0)
我在Windows 7 32位系统上收到此错误。所以我这样做是为了使其正常工作。
添加此
`os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')`
在django项目的myproj/settings.py
文件中定义芹菜实例之前。
它应该像
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'