[英]Celery doesn't see the redis broker
我正在嘗試將 Celery 與 Redis 一起使用。
這是我的celery.py文件:
from __future__ import absolute_import
from celery import Celery
celery=Celery(include=[ 'tasks.chatterbox' ])
# import celery config file
celery.config_from_object('celeryconfig')
if __name__ == '__main__':
celery.start()
這是我的celeryconfig.py文件:
BROKER_URL = 'redis://localhost:6379/0'
# redis backend
CELERY_RESULT_BACKEND = 'redis://'
當我運行時:
celery -A broker.celery worker -l info
我收到此錯誤:
Traceback (most recent call last):
File "/usr/local/bin/celery", line 9, in <module>
load_entry_point('celery==3.1.11', 'console_scripts', 'celery')()
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/__main__.py", line 30, in main
main()
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/bin/celery.py", line 81, in main
cmd.execute_from_commandline(argv)
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/bin/celery.py", line 769, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/bin/base.py", line 306, in execute_from_commandline
return self.handle_argv(self.prog_name, argv[1:])
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/bin/celery.py", line 761, in handle_argv
return self.execute(command, argv)
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/bin/celery.py", line 693, in execute
).run_from_argv(self.prog_name, argv[1:], command=argv[0])
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/bin/worker.py", line 179, in run_from_argv
return self(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/bin/base.py", line 269, in __call__
ret = self.run(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/bin/worker.py", line 212, in run
state_db=self.node_format(state_db, hostname), **kwargs
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/worker/__init__.py", line 100, in __init__
self.setup_instance(**self.prepare_args(**kwargs))
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/worker/__init__.py", line 126, in setup_instance
self.should_use_eventloop() if use_eventloop is None
File "/usr/local/lib/python2.7/dist-packages/celery-3.1.11-py2.7.egg/celery/worker/__init__.py", line 245, in should_use_eventloop
self._conninfo.is_evented and not self.app.IS_WINDOWS)
File "/usr/local/lib/python2.7/dist-packages/kombu-3.0.16-py2.7.egg/kombu/connection.py", line 836, in is_evented
return self.transport.supports_ev
File "/usr/local/lib/python2.7/dist-packages/kombu-3.0.16-py2.7.egg/kombu/connection.py", line 786, in transport
self._transport = self.create_transport()
File "/usr/local/lib/python2.7/dist-packages/kombu-3.0.16-py2.7.egg/kombu/connection.py", line 518, in create_transport
return self.get_transport_cls()(client=self)
File "/usr/local/lib/python2.7/dist-packages/kombu-3.0.16-py2.7.egg/kombu/transport/redis.py", line 916, in __init__
self.connection_errors, self.channel_errors = self._get_errors()
File "/usr/local/lib/python2.7/dist-packages/kombu-3.0.16-py2.7.egg/kombu/transport/redis.py", line 954, in _get_errors
return get_redis_error_classes()
File "/usr/local/lib/python2.7/dist-packages/kombu-3.0.16-py2.7.egg/kombu/transport/redis.py", line 78, in get_redis_error_classes
from redis import exceptions
ImportError: No module named redis
最后是我的項目結構:
.
├── __init__.py
├── celeryconfig.py
├── broker
│ ├── celery.py
│ ├── __init__.py
├── tasks
├── chatterbox.py
├── __init__.py
我在用:
錯誤跟蹤清楚地說明了原因(像往常一樣,自下而上閱讀)
ImportError: No module named redis
您可以檢查是否安裝了redis
使用pip
$ pip freeze
輸出應包含以redis=
開頭的行
安裝redis:
$ pip install redis
我使用virtualenv
有時忘記切換到適當的環境。 在這些情況下,我會錯過我希望出現的模塊。 然后我只需切換到適當的虛擬環境或安裝缺少的模塊。
PS:成為專家的基本技巧是閱讀錯誤消息並遵循它。
您可以使用 celery[redis] 包一次性安裝 Celery 和 Redis (python) 依賴項
$ pip install -U celery[redis]
參考
我遇到了這個問題並通過使用 python3 安裝 redis 來修復它。 有時,如果您不指定,您的系統默認使用 python2。 在命令行或終端中,輸入
python3 -m pip install redis
那應該為您下載 Python3 中的 redis,它對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.