django celery 执行异常

配置好了django celery,启动celery正常,但是一下发任务就抛异常
AttributeError: 'str' object has no attribute 'items'

具体的信息如下(为啥贴这么多log,为了好检索...)

(python36) [root@wk-api wk_api]# python manage.py celery worker -l info
/home/python36/lib/python3.6/site-packages/celery/platforms.py:812: RuntimeWarning: You are running the worker with superuser privileges, which is
absolutely not recommended!

Please specify a different user using the -u option.

User information: uid=0 euid=0 gid=0 egid=0

  uid=uid, euid=euid, gid=gid, egid=egid,
[2019-02-13 18:07:07,175: WARNING/MainProcess] /home/python36/lib/python3.6/site-packages/celery/apps/worker.py:161: CDeprecationWarning:
Starting from version 3.2 Celery will refuse to accept pickle by default.

The pickle serializer is a security concern as it may give attackers
the ability to execute any command.  It's important to secure
your broker from unauthorized access when using pickle, so we think
that enabling pickle should require a deliberate action and not be
the default choice.

If you depend on pickle then you should set a setting to disable this
warning and to be sure that everything will continue working
when you upgrade to Celery 3.2::

    CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']

You must only enable the serializers that you will actually use.


  warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED))

 -------------- celery@wk-api v3.1.26.post2 (Cipater)
---- **** -----
--- * ***  * -- Linux-3.10.0-957.el7.x86_64-x86_64-with-centos-7.6.1810-Core
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         default:0x7f1e00e5d6d8 (djcelery.loaders.DjangoLoader)
- ** ---------- .> transport:   redis://127.0.0.1:6379/0
- ** ---------- .> results:
- *** --- * --- .> concurrency: 2 (prefork)
-- ******* ----
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery


[tasks]
  . sendmail
  . touchfile
  . wk_api.celery.debug_task

[2019-02-13 18:07:07,296: INFO/MainProcess] Connected to redis://127.0.0.1:6379/0
[2019-02-13 18:07:07,305: INFO/MainProcess] mingle: searching for neighbors

[2019-02-13 18:07:08,309: INFO/MainProcess] mingle: all alone
[2019-02-13 18:07:08,324: WARNING/MainProcess] /home/python36/lib/python3.6/site-packages/djcelery/loaders.py:133: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
  warn('Using settings.DEBUG leads to a memory leak, never '
[2019-02-13 18:07:08,325: WARNING/MainProcess] /home/python36/lib/python3.6/site-packages/celery/fixups/django.py:265: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
  warnings.warn('Using settings.DEBUG leads to a memory leak, never '
[2019-02-13 18:07:08,325: WARNING/MainProcess] celery@wk-api ready.


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

网上翻腾了半天,最后发现是redis版本太高导致的

(python36) [root@wk-api wk_api]# pip list|grep redis
celery-with-redis       3.0
redis                   3.1.0

卸载redis-3.1.0

(python36) [root@wk-api wk_api]# pip uninstall redis
Uninstalling redis-3.1.0:
  Would remove:
    /home/python36/lib/python3.6/site-packages/redis-3.1.0.dist-info/*
    /home/python36/lib/python3.6/site-packages/redis/*
Proceed (y/n)? y
  Successfully uninstalled redis-3.1.0

安装redis-2.10.6

(python36) [root@wk-api wk_api]# pip install redis==2.10.6
Looking in indexes: http://pypi.douban.com/simple
Collecting redis==2.10.6
  Downloading http://pypi.doubanio.com/packages/3b/f6/7a76333cf0b9251ecf49efff635015171843d9b977e4ffcf59f9c4428052/redis-2.10.6-py2.py3-none-any.whl (64kB)
    100% |████████████████████████████████| 71kB 2.8MB/s
Installing collected packages: redis
Successfully installed redis-2.10.6

然后测试就正常了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。