0
所以我在Flask中製作一個應用程序,並且我使用RabbitMQ作爲消息代理以及後端芹菜工作者。我還使用SocketIO爲了向客戶報告芹菜工作者狀態。當我運行我的應用程序時,出現以下錯誤: Flask Socket.IO給Redis錯誤,但我使用的是RabbitMQ
我很感謝您是否讓我知道爲什麼會出現此錯誤。
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
謝謝米格爾,猴子補丁解決了這個問題。我有點困惑,因爲我已經用Flask,Socket.io和芹菜做了一個簡單的應用程序,它沒有猴子修補完美的作品。這裏是我的簡單應用程序的鏈接https://github.com/poonesh/Flask-SocketIO-Celery-example。所以現在,我想知道爲什麼簡單的應用程序工作?當我們需要做猴子補丁? – Pooneh
當您使用發佈阻止操作的庫時,您需要使用Monkey修補程序。這些涉及到網絡,線程,子進程,睡眠等。如果你不修補,那些操作將被阻止。如果您的客戶端很少,您可能不會注意到問題,但這很糟糕,因爲除非您使用修補程序,否則應用程序將凍結這些調用的持續時間。 – Miguel
非常感謝Miguel的回答。 – Pooneh