Python 将芹菜工人与烧瓶一起使用时出现协议错误

Python 将芹菜工人与烧瓶一起使用时出现协议错误,python,multithreading,flask,celery,Python,Multithreading,Flask,Celery,我在用烧瓶管理远程芹菜工人。flask中的配置是redis用于后端,rabbitmq用作消息代理 Flask使用多个线程运行,芹菜get()用于两个位置 @app.routes("/route1") def method1(): result1_obj = remote_method_1.apply_async() result1 = result1_obj.get() @app.routes("/route2") def method2

我在用烧瓶管理远程芹菜工人。flask中的配置是redis用于后端,rabbitmq用作消息代理

Flask使用多个线程运行,芹菜get()用于两个位置

@app.routes("/route1")
def method1():
    result1_obj = remote_method_1.apply_async()
    result1 = result1_obj.get()

@app.routes("/route2")
def method2():
    result2_obj = remote_method_2.apply_async()
    result2 = result2_obj.get()
因此,每当method1()和method2()下的两个不同线程同时调用get()时

错误日志如下所示:-

Traceback (most recent call last):
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\flask_restplus\api.py", line 325, in wrapper
    resp = resource(*args, **kwargs)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\flask\views.py", line 89, in view
    return self.dispatch_request(*args, **kwargs)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\flask_restplus\resource.py", line 44, in dispatch_request
    resp = meth(*args, **kwargs)
  File "C:\Users\venugopal.venkatesh\OneDrive - Veoneer\Documents\sprint35\fdt_report_gen\src\application\routes.py", line 89, in wrap
    return f(*args, **kwargs)
  File "C:\Users\venugopal.venkatesh\OneDrive - Veoneer\Documents\sprint35\fdt_report_gen\src\db\__init__.py", line 281, in wrap
    return f(*args, **kwargs)
  File "C:\Users\venugopal.venkatesh\OneDrive - Veoneer\Documents\sprint35\fdt_report_gen\src\doors\routes.py", line 141, in post
    abort_res = abort_obj.get()
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\celery\result.py", line 237, in get
    on_message=on_message,
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\celery\backends\asynchronous.py", line 200, in wait_for_pending
    for _ in self._wait_for_pending(result, **kwargs):
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\celery\backends\asynchronous.py", line 268, in _wait_for_pending
    on_interval=on_interval):
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\celery\backends\asynchronous.py", line 55, in drain_events_until
    yield self.wait_for(p, wait, timeout=interval)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\celery\backends\asynchronous.py", line 64, in wait_for
    wait(timeout=timeout)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\celery\backends\redis.py", line 160, in drain_events
    message = self._pubsub.get_message(timeout=timeout)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\redis\client.py", line 3617, in get_message
    response = self.parse_response(block=False, timeout=timeout)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\redis\client.py", line 3505, in parse_response
    response = self._execute(conn, conn.read_response)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\redis\client.py", line 3479, in _execute
    return command(*args, **kwargs)
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\redis\connection.py", line 739, in read_response
    response = self._parser.read_response()
  File "C:\Users\venugopal.venkatesh\.virtualenvs\fdt_report_gen-BnOKsvM9\lib\site-packages\redis\connection.py", line 331, in read_response
    raise InvalidResponse("Protocol Error: %r" % raw)
redis.exceptions.InvalidResponse: Protocol Error:

有没有关于如何解决此错误的建议?

这是芹菜库中的一个错误

现在后端对象不是线程安全的


您需要在没有线程的情况下运行Flask应用程序,例如,
uwsgi--processs 12--threads 1--http 0.0.0.0:5000--module server:app

显示的是完整的错误回溯@美元。我已经添加了错误日志。您是否在线程之间共享一个redis连接?@klauds。是的,我使用一个redis连接作为后端,我应该使用多个redis连接吗?