我有一个使用 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'],
)
Run Code Online (Sandbox Code Playgroud)
但是每次我添加工作芹菜都会给我这个错误
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'
Run Code Online (Sandbox Code Playgroud)
我应该为 celery 使用哪个选项来不为其 redis 连接设置超时?
看来这个问题与系统上安装的redis-server版本有关,socket_connect_timeout是在redis 2.10.0中首次引入的。
所以你需要更新你的redis版本。
如果您在 ubuntu 服务器上运行,您可以安装官方 apt 存储库:
$ sudo apt-get install -y python-software-properties
$ sudo add-apt-repository -y ppa:rwky/redis
$ sudo apt-get update
$ sudo apt-get install -y redis-server
Run Code Online (Sandbox Code Playgroud)
并更新到 celery 的最新版本。
这是 celery 中的 github 问题,因为不仅你遇到这个问题: https: //github.com/celery/celery/issues/2903
如果一切都不适合你,我建议使用rabbitmq而不是Redis:
$ sudo apt-get install rabbitmq-server
$ sudo pip install librabbitmq
Run Code Online (Sandbox Code Playgroud)
并在您的应用程序中使用以下 CELERY_BROKER_URL 配置 celery:
'amqp://guest:guest@localhost:5672//'
Run Code Online (Sandbox Code Playgroud)
我希望这个答案能够满足您的所有需求。干杯
| 归档时间: |
|
| 查看次数: |
1708 次 |
| 最近记录: |