python - Celery/Redis : redis. 异常。ResponseError: 'set' 命令的参数数量错误

标签 python redis celery

我正在尝试在我的 Flask 应用程序中使用 Celery 进行异步调用。为了完成这次运行,我做了以下工作:

  1. 在我的pycharm环境中安装了celery
  2. 已安装 redis(来自此处:https://github.com/dmajkic/redis/downloads)
  3. 在我的 main.py 应用程序中实现 celery
from flask import Flask
from celery import Celery

flask_app = Flask(__name__)
flask_app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
flask_app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'

celery = Celery(flask_app.name, broker=flask_app.config['CELERY_BROKER_URL'],
                backend=flask_app.config['CELERY_RESULT_BACKEND'])


@celery.task
def start_learn():
    a = 1+1
    return a


@flask_app.route("/ConLearn/XML/LearnRequest", methods=['POST'])
def learnRequest():
    task = start_learn.apply_async()
    return "", 201
  1. 使用“redis-server.exe”(64 位)运行 redis redis runs
  1. 启动flask app main.py
  2. 在终端中启动 celery celery -A main.celery worker

--> 失败发生:

2021-03-21 18:09:32.577271: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2021-03-21 18:09:32.587765: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.

 -------------- celery@md2cj75c v5.0.5 (singularity)
--- ***** -----
-- ******* ---- Windows-10-10.0.18362-SP0 2021-03-21 18:09:43
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         main:0x213db0f9940
- ** ---------- .> transport:   redis://localhost:6379/0
- ** ---------- .> results:     redis://localhost:6379/0
- *** --- * --- .> concurrency: 4 (solo)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[2021-03-21 18:09:45,075: CRITICAL/MainProcess] Unrecoverable error: ResponseError("wrong number of arguments for 'set' command")
Traceback (most recent call last):
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\worker\worker.py", line 203, in start
    self.blueprint.start(self)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\bootsteps.py", line 116, in start
    step.start(parent)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\bootsteps.py", line 365, in start
    return self.obj.start()
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\worker\consumer\consumer.py", line 311, in start
    blueprint.start(self)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\bootsteps.py", line 116, in start
    step.start(parent)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\worker\consumer\mingle.py", line 37, in start
    self.sync(c)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\worker\consumer\mingle.py", line 41, in sync
    replies = self.send_hello(c)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\worker\consumer\mingle.py", line 54, in send_hello
    replies = inspect.hello(c.hostname, our_revoked._data) or {}
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\app\control.py", line 152, in hello
    return self._request('hello', from_node=from_node, revoked=revoked)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\app\control.py", line 94, in _request
    return self._prepare(self.app.control.broadcast(
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\celery\app\control.py", line 474, in broadcast
    return self.mailbox(conn)._broadcast(
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\kombu\pidbox.py", line 349, in _broadcast
    return self._collect(reply_ticket, limit=limit,
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\kombu\pidbox.py", line 391, in _collect
    self.connection.drain_events(timeout=timeout)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\kombu\connection.py", line 324, in drain_events
    return self.transport.drain_events(self.connection, **kwargs)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\kombu\transport\virtual\base.py", line 963, in drain_events
    get(self._deliver, timeout=timeout)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\kombu\transport\redis.py", line 381, in get
    self.maybe_restore_messages()
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\kombu\transport\redis.py", line 339, in maybe_restore_messages
    return channel.qos.restore_visible(
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\kombu\transport\redis.py", line 196, in restore_visible
    with Mutex(client, self.unacked_mutex_key,
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\contextlib.py", line 113, in __enter__
    return next(self.gen)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\kombu\transport\redis.py", line 117, in Mutex
    lock_acquired = lock.acquire(blocking=False)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\redis\lock.py", line 187, in acquire
    if self.do_acquire(token):
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\redis\lock.py", line 203, in do_acquire
    if self.redis.set(self.name, token, nx=True, px=timeout):
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\redis\client.py", line 1801, in set
    return self.execute_command('SET', *pieces)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\redis\client.py", line 901, in execute_command
    return self.parse_response(conn, command_name, **options)
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\redis\client.py", line 915, in parse_response
    response = connection.read_response()
  File "C:\Users\z002p84d\.conda\envs\ConLearn\lib\site-packages\redis\connection.py", line 756, in read_response
    raise response
redis.exceptions.ResponseError: wrong number of arguments for 'set' command

谁能帮我解决这个问题?我现在花了几个小时在互联网上搜索并尝试不同的设置。

谢谢,

马蒂亚斯

最佳答案

您似乎使用的是旧版 Redis。您的链接包含 2011 年(10 年前)的 Redis 2.4.5。

在 celery 中 source code可以看到如下需求:redis>=3.2.0。

您可以按照 docs 中的说明尝试通过 pip 安装:

pip install -U "celery[redis]"

关于python - Celery/Redis : redis. 异常。ResponseError: 'set' 命令的参数数量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66735443/

相关文章:

python - Pyinstaller key 环 Windows 32 位

python - 当调试设置为 False 时,我无法登录我的 Django 应用程序

python - Python 3 的静态类属性

node.js - node.js 中的压缩

redis - 两个客户端应该如何同时等待一个值出现在 Redis 中?

Django celery crontab每30秒-甚至有可能吗?

python - 为 Celery 和 Django 启用 Beat 时出现 TypeError

python - Celery 任务状态取决于 CELERY_TASK_RESULT_EXPIRES

python - 为什么在这里引发 IndentationError 而不是 SyntaxError?

redis - 如何使用重复成员将排序后的数据存储在 Redis 中?