解决celery-redis异步错误: File “/ling/.virtualenvs/AttributeError: ‘float’ object has no attribute ‘items’

问题:使用redis和celery执行异步任务时报错

File"/home/ling/.virtualenvs/dailyfresh/lib/python3.6/site-packages/redis/_compat.py",
line 123, in iteritems
return iter(x.items()) AttributeError: ‘float’ object has no attribute ‘items’

在这里插入图片描述

原因:

有的说是python 的redis包版本太高了,降低版本:pip install redis==2.10.6
也有说法是3以后的版本和2的版本的兼容问题,不回退版本进行兼容配置亦可。

解决:

进入到报错的目录下:

copy自己报错的目录。

1
cd /home/ling/.virtualenvs/dailyfresh/lib/python3.6/site-packages/kombu/transport/

找到redis.py文件,进行修改
在这里插入图片描述
修改redis.py文件里面的这行代码: pipe.zadd(self.unacked_index_key, delivery_tag, time())
###改成pipe.zadd(‘self.unacked_index_key’, {delivery_tag:time()})
在这里插入图片描述

执行成功
在这里插入图片描述

处理者一方必须初始化django环境,

1
2
3
4
5
6
7
8
# 处理者也需要任务的代码
# 任务处理者本身需要使用到django本身的配置项,在此进行初始化,
# 因为只是用到了celery的worker,并没有启动整个django项目
# 在任务处理者worker一端加以下这4句.在任务发出者端直接执行了django项目,因此不需要加
import os
import django   # django环境本身的初始化
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dailyfresh.settings')
django.setup()

否则会报错。
在这里插入图片描述