我在我的flask应用程序中尝试使用Celery进行异步调用。 为了使其运行,我已经完成了以下操作:
- 在我的pycharm环境中安装了celery。
- 安装了redis(从这里: https://github.com/dmajkic/redis/downloads)。
- 在我的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
- 使用64位的'redis-server.exe'运行redis redis runs
- 启动flask应用程序main.py
- 在终端中使用以下命令启动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
有人能帮我解决这个问题吗?我现在已经花费了数小时搜索互联网并尝试不同的设置。
谢谢,
马蒂亚斯