Flask Socket.IO给出了Redis错误,但我使用的是RabbitMQ

时间:2017-05-22 04:28:20

标签: python celery-task flask-socketio

所以我在Flask中制作应用程序,我使用RabbitMQ作为消息代理,也使用后端Celery worker。我还使用SocketIO来向客户报告芹菜工人状态。当我运行我的应用程序时,我收到以下错误: enter image description here

如果您让我知道为什么会收到此错误,我感激不尽。

app.py

app = Flask(__name__)
app.config['SECRET_KEY'] = ''

app.config.update(
CELERY_BROKER_URL = 'amqp://localhost//',
CELERY_RESULT_BACKEND='amqp://localhost//'
)

socketio = SocketIO(app, message_queue='amqp://')
celery = make_celery(app)


@app.route('/')
def my_form():
    return render_template("form.html")

的JavaScript

var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port );

make_celery模块

def make_celery(app):
    celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'],
                    broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
    TaskBase = celery.Task
    class ContextTask(TaskBase):
        abstract = True
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)
    celery.Task = ContextTask
    return celery

1 个答案:

答案 0 :(得分:1)

糟糕,错误消息已从其他模块复制/粘贴,我忘了更新它。该消息应该已经阅读" Kombu需要一个猴子修补的套接字库来与gevent"一起工作。

基本上这就是说,如果没有猴子修补,gevent将在发出套接字操作时阻塞。有关详细信息,请参阅http://www.gevent.org/gevent.monkey.html