我有一个应用程序使用celery作为其代理任务,我使用redis作为其代理和结果后端,我设置redis使用unix套接字。
brok = 'redis+socket://:ABc@/tmp/redis.sock'
app = Celery('NTWBT', backend=brok, broker=brok)
app.conf.update(
BROKER_URL=brok,
BROKER_TRANSPORT_OPTIONS={
"visibility_timeout": 3600
},
CELERY_RESULT_BACKEND=brok,
CELERY_ACCEPT_CONTENT=['pickle', 'json', 'msgpack', 'yaml'],
)
字符串
但每次我添加一个工作celery 给我这个错误
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 283, in trace_task
uuid, retval, SUCCESS, request=task_request,
File "/usr/local/lib/python2.7/dist-packages/celery/backends/base.py", line 257, in store_result
request=request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/backends/base.py", line 491, in _store_result
self.set(self.get_key_for_task(task_id), self.encode(meta))
File "/usr/local/lib/python2.7/dist-packages/celery/backends/redis.py", line 160, in set
return self.ensure(self._set, (key, value), **retry_policy)
File "/usr/local/lib/python2.7/dist-packages/celery/backends/redis.py", line 149, in ensure
**retry_policy
File "/usr/local/lib/python2.7/dist-packages/kombu/utils/__init__.py", line 246, in retry_over_time
return fun(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/backends/redis.py", line 169, in _set
pipe.execute()
File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 2620, in execute
self.shard_hint)
File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 897, in get_connection
connection = self.make_connection()
File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 906, in make_connection
return self.connection_class(**self.connection_kwargs)
TypeError: __init__() got an unexpected keyword argument 'socket_connect_timeout'
型
我应该使用哪个选项为celery donot设置超时为它的redis连接?
3条答案
按热度按时间uurv41yg1#
在我的情况下的问题是,我的计算机的IP被阻止从服务器上的端口.在允许TCP连接通过这个端口从我的本地计算机后,celery 可以再次连接到后端.
除此之外,下面的一些celery设置可能有助于处理超时(您可以在celery documentation中阅读更多关于它们的信息)。
字符串
wz3gfoph2#
似乎这个问题与你系统上安装的一个redis服务器版本有关,socket_connect_timeout是在redis 2.10.0中首次引入的。
所以你需要更新你的Redis版本
如果你在ubuntu服务器上运行,你可以安装官方的apt仓库:
字符串
并更新到celery 的最新版本。
这是celery中的github问题,因为不仅您会遇到此问题:https://github.com/celery/celery/issues/2903
如果一切都不适合你,我建议使用rabbitmq而不是Redis:
型
然后在你的应用中使用这个CELERY_BROKER_URL配置celery:
型
我希望这个答案能满足你的所有需求。干杯
zour9fqk3#
有几个库中的错误导致Celery中出现此异常:
如果你使用Redis和UNIX套接字作为代理,还没有简单的修复方法。除非你对
celery
,kombu
和/或redis-py
库进行猴子补丁。现在,我建议你使用Redis与TCP连接,或者切换到另一个代理,例如RabbitMQ。