報錯(AttributeError: 'str' object has no attribute 'items')的解決辦法

在啓動Celery或啓動後調用Celery實現異步任務的時候報錯:AttributeError: ‘str’ object has no attribute ‘items’,經過百度一番,發現是redis版本過高引起的,以下進行報錯的展示與解決。

一、報錯演示

[2019-12-11 20:17:43,836: ERROR/MainProcess] Unrecoverable error: AttributeError("'str' object has no attribute 'items'",)
Traceback (most recent call last):
  File "/home/celery/venv/lib/python3.6/site-packages/celery/worker/__init__.py", line 206, in start
    self.blueprint.start(self)
  File "/home/celery/venv/lib/python3.6/site-packages/celery/bootsteps.py", line 123, in start
    step.start(parent)
  File "/home/celery/venv/lib/python3.6/site-packages/celery/bootsteps.py", line 374, in start
    return self.obj.start()
  File "/home/celery/venv/lib/python3.6/site-packages/celery/worker/consumer.py", line 280, in start
    blueprint.start(self)
  File "/home/celery/venv/lib/python3.6/site-packages/celery/bootsteps.py", line 123, in start
    step.start(parent)
  File "/home/celery/venv/lib/python3.6/site-packages/celery/worker/consumer.py", line 884, in start
    c.loop(*c.loop_args())
  File "/home/celery/venv/lib/python3.6/site-packages/celery/worker/loops.py", line 76, in asynloop
    next(loop)
  File "/home/celery/venv/lib/python3.6/site-packages/kombu/async/hub.py", line 340, in create_loop
    cb(*cbargs)
  File "/home/celery/venv/lib/python3.6/site-packages/kombu/transport/redis.py", line 1019, in on_readable
    self._callbacks[queue](message)
  File "/home/celery/venv/lib/python3.6/site-packages/kombu/transport/virtual/__init__.py", line 534, in _callback
    self.qos.append(message, message.delivery_tag)
  File "/home/celery/venv/lib/python3.6/site-packages/kombu/transport/redis.py", line 146, in append
    pipe.zadd(self.unacked_index_key, delivery_tag, time()) \
  File "/home/celery/venv/lib/python3.6/site-packages/redis/client.py", line 2388, in zadd
    for pair in iteritems(mapping):
  File "/home/celery/venv/lib/python3.6/site-packages/redis/_compat.py", line 161, in iteritems
    return iter(x.items())
AttributeError: 'str' object has no attribute 'items'

二、問題解決

導致報錯的原因是redis版本過高,對redis進行降級

  1. 卸載原有redis

    pip uninstall redis
    
  2. 重新安裝redis
    版本號可根據自己的項目進行改動

    pip install redis==2.10.6
    

歡迎留言吐槽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章