我按照Celery 4.0.0的“Django的第一步”教程: http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
这一切都按预期工作。但是,如果我尝试将传输从AMQP更改为Django ORM,将其添加到settings.py
的末尾:
CELERY_BROKER_URL = 'django://'
然后当我运行工作进程(celery -A proj worker
)时,出现错误:
Traceback (most recent call last):
File "/home/ac/src/proj/.pyenv/bin/celery", line 11, in <module>
sys.exit(main())
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/__main__.py", line 14, in main
_main()
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 326, in main
cmd.execute_from_commandline(argv)
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 488, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/base.py", line 278, in execute_from_commandline
return self.handle_argv(self.prog_name, argv[1:])
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 480, in handle_argv
return self.execute(command, argv)
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 412, in execute
).run_from_argv(self.prog_name, argv[1:], command=argv[0])
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/worker.py", line 221, in run_from_argv
return self(*args, **options)
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/base.py", line 241, in __call__
ret = self.run(*args, **kwargs)
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/worker.py", line 255, in run
**kwargs)
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/worker/worker.py", line 99, in __init__
self.setup_instance(**self.prepare_args(**kwargs))
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/worker/worker.py", line 120, in setup_instance
self._conninfo = self.app.connection_for_read()
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/app/base.py", line 732, in connection_for_read
return self._connection(url or self.conf.broker_read_url, **kwargs)
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/app/base.py", line 808, in _connection
'broker_connection_timeout', connect_timeout
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/kombu/connection.py", line 179, in __init__
if not get_transport_cls(transport).can_parse_url:
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/kombu/transport/__init__.py", line 81, in get_transport_cls
_transport_cache[transport] = resolve_transport(transport)
File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/kombu/transport/__init__.py", line 62, in resolve_transport
raise KeyError('No such transport: {0}'.format(transport))
KeyError: u'No such transport: django'
我做错了什么?
答案 0 :(得分:7)
您可以将其用作结果后端,但不能再作为经纪人使用。
支持的代理列表在此处on the celery project site.
在您关注的教程页面中,您可以选择使用django ORM作为结果后端:
扩展django-celery-results - 使用Django ORM / Cache作为 结果后端
django-celery-results扩展使用提供结果后端 Django ORM或Django Cache框架。
简短回答 - Django ORM不再是经纪人,it was removed in version 4.0。
答案 1 :(得分:1)
没有名为django
的传输,因此您无法使用django://
。您可以使用的是RabbitMQ
,如下所示:
CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'