尝试使用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
小智 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'
对于Celery 4.1Windows。
设置环境变量FORKED_BY_MULTIPROCESSING=1。然后你可以简单地运行celery -A <celery module> worker.
它对我有用:
celery -A my_project_name worker --pool=solo -l info
Run Code Online (Sandbox Code Playgroud)
基本上事情变成单线程并且被支持
| 归档时间: |
|
| 查看次数: |
5469 次 |
| 最近记录: |