运行Celery worker时出现AttributeError错误

3
我将尝试在我的Django应用程序中使用celery作为后台进程。 Django版本为1.4.8,最新适用的celery版本为3.1.25。
我使用Redis(3.1.0)作为代理和后端,json作为序列化程序。
当我启动工作程序celery -A celery_app worker -l info时,我会收到属性错误'unicode' object has no attribute 'iteritems' 我的settings.py文件:
BROKER_URL = 'redis://localhost'
CELERY_RESULT_BACKEND = 'redis://localhost/'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True

celery_app.py:

import sys
from django.conf import settings
from celery import Celery

project_root = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(project_root, '../env'))
sys.path.insert(0, os.path.join(project_root, '../'))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')
app.config_from_object('project.settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)

tasks.py:

@celery_app.task
def sample_task(x):
    return 'Test response'

这就是我运行此任务的方法:

sample_task.delay({'key': 'test'})

我收到了以下错误信息:

File "/Users/user/project/venv/lib/python2.7/site-packages/redis/_compat.py", line 94, in iteritems
    return x.iteritems()
AttributeError: 'unicode' object has no attribute 'iteritems'

完整的回溯信息:
[2019-01-31 16:43:08,909: ERROR/MainProcess] Unrecoverable error: AttributeError("'unicode' object has no attribute 'iteritems'",)
Traceback (most recent call last):
  File "/Users/user/project/venv/lib/python2.7/site-packages/celery/worker/__init__.py", line 206, in start
    self.blueprint.start(self)
  File "/Users/user/project/venv/lib/python2.7/site-packages/celery/bootsteps.py", line 123, in start
    step.start(parent)
  File "/Users/user/project/venv/lib/python2.7/site-packages/celery/bootsteps.py", line 374, in start
    return self.obj.start()
  File "/Users/user/project/venv/lib/python2.7/site-packages/celery/worker/consumer.py", line 280, in start
    blueprint.start(self)
  File "/Users/user/project/venv/lib/python2.7/site-packages/celery/bootsteps.py", line 123, in start
    step.start(parent)
  File "/Users/user/project/venv/lib/python2.7/site-packages/celery/worker/consumer.py", line 884, in start
    c.loop(*c.loop_args())
  File "/Users/user/project/venv/lib/python2.7/site-packages/celery/worker/loops.py", line 76, in asynloop
    next(loop)
  File "/Users/user/project/venv/lib/python2.7/site-packages/kombu/async/hub.py", line 340, in create_loop
    cb(*cbargs)
  File "/Users/user/project/venv/lib/python2.7/site-packages/kombu/transport/redis.py", line 1019, in on_readable
    self._callbacks[queue](message)
  File "/Users/user/project/venv/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 534, in _callback
    self.qos.append(message, message.delivery_tag)
  File "/Users/user/project/venv/lib/python2.7/site-packages/kombu/transport/redis.py", line 146, in append
    pipe.zadd(self.unacked_index_key, delivery_tag, time()) \
  File "/Users/user/project/venv/lib/python2.7/site-packages/redis/client.py", line 2320, in zadd
    for pair in iteritems(mapping):
  File "/Users/user/project/venv/lib/python2.7/site-packages/redis/_compat.py", line 94, in iteritems
    return x.iteritems()
AttributeError: 'unicode' object has no attribute 'iteritems'

我尝试在互联网上找到问题,并尝试传递其他参数到任务中。我不知道如何调试Celery进程,也找不到自己的解决方案。请帮帮我。


@SergeyPugach 3.1.0 - Bogdan Popov
@SergeyPugach 是的。我更新了问题。 - Bogdan Popov
4
看起来这个 Celery 版本不支持 Redis 3。尝试安装 Redis 2.10.6。 - Sergey Pugach
@BogdanPopov安装Redis 2.10.6有帮助吗? - Sergey Pugach
1
@AlexYu 不,这不重要。问题出在redis的版本不兼容。 - Bogdan Popov
显示剩余5条评论
1个回答

9

看起来这个Celery版本不支持Redis 3。尝试安装Redis 2.10.6


它有帮助!谢谢。 - Bogdan Popov
在Docker中,我现在无法运行redis:2...错误#无法处理RDB格式版本9。 - pavlovma007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接