问题:使用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() |
否则会报错。
