redis作为celery的存出结果时出错

下面是我的celery配制

BROKER_URL = 'amqp://cloud:wxy970928@localhost:5672//'  # 连接rabbitmq
# CELERY_RESULT_BACKEND = "amqp://cloud:wxy970928@localhost:5672//cloud_res"

# BROKER_URL = 'redis://:wxy970928@localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://:wxy970928@localhost:6379/1'

CELERYD_CONCURRENCY = 30  # 并发worker数
CELERYD_FORCE_EXECV = True  # 非常重要,有些情况下可以防止死锁
CELERYD_MAX_TASKS_PER_CHILD = 100  # 每个worker最多执行100个任务就会被销毁,

如代码块所示,今天使用redis作为celery的存储结果时,一直出现错误,错误如下:

···

redis.exceptions.ResponseError: Command # 1 (SETEX b’celery-task-meta-734b07fc-944d-4416-a4c8-61834880f345’ b’\x80\x02}q\x00(X\x06\x00\x00\x00statu
sq\x01X\x07\x00\x00\x00SUCCESSq\x02X\x06\x00\x00\x00resultq\x03K\x06X\t\x00\x00\x00tracebackq\x04NX\x08\x00\x00\x00childrenq\x05]q\x06u.’ 86400) of
pipeline caused error: value is not an integer or out of range

···

这里意思是值超出范围,一开始没想到会是源码的问题,寻思着设置key value expire没什么问题,于是我试着将上述语句输入到redis里,报**Invalid argument(s)**这个错误,这才发现语句的顺序有问题,应该是key expire value。至此我点进这个错误里:

 File "c:\python\python36\lib\site-packages\celery\backends\redis.py", line 172, in _set
    pipe.execute()

这是管道提交时报的错,进去后是这样一段代码
代码路径:c:\python\python36\lib\site-packages\celery\backends\redis.py
这里只需将源码中的pipe.setex(key, value, self.expires)改为pipe.setex(key, self.expires,value)就可以了,重新启动celery,触发任务后再redis就可以看到键值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值