作者:yangchang78179 | 来源:互联网 | 2023-08-19 11:09
用celery实现发送邮件的功能,用redis作为中间人。
可以正常启动celery,但是一旦用celery发送邮件,就会报错并退出:
[2018-12-28 13:49:14,636: ERROR/MainProcess] Unrecoverable error: AttributeError("'str' object has no attribute 'items'",)
Traceback (most recent call last):File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/celery/worker/__init__.py", line 206, in startself.blueprint.start(self)File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/celery/bootsteps.py", line 123, in startstep.start(parent)File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/celery/bootsteps.py", line 374, in startreturn self.obj.start()File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/celery/worker/consumer.py", line 280, in startblueprint.start(self)File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/celery/bootsteps.py", line 123, in startstep.start(parent)File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/celery/worker/consumer.py", line 884, in startc.loop(*c.loop_args())File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/celery/worker/loops.py", line 76, in asynloopnext(loop)File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/kombu/async/hub.py", line 340, in create_loopcb(*cbargs)File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/kombu/transport/redis.py", line 1019, in on_readableself._callbacks[queue](message)File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/kombu/transport/virtual/__init__.py", line 534, in _callbackself.qos.append(message, message.delivery_tag)File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/kombu/transport/redis.py", line 146, in appendpipe.zadd(self.unacked_index_key, delivery_tag, time()) \File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/redis/client.py", line 2263, in zaddfor pair in iteritems(mapping):File "/home/python/.virtualenvs/django_class/lib/python3.5/site-packages/redis/_compat.py", line 123, in iteritemsreturn iter(x.items())
AttributeError: 'str' object has no attribute 'items'
查了好久发现原来是因为以前下的redis版本过高( 3.0.1 ),重装redis
pip install redis==2.10.6
就可以发送邮件了。