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
ブロック操作を発行するライブラリを使用する場合は、サルのパッチを適用する必要があります。これらはネットワーキング、スレッディング、サブプロセス、スリープなどに関連しています。あなたがサルパッチをしていないと、それらの操作はブロックされます。クライアント数が少ない場合は問題に気付かないかもしれませんが、サルパッチが適用されていない限り、これらの呼び出しの間アプリケーションがフリーズするため、これは悪いことです。 – Miguel
あなたの答えにはとても感謝しています。 – Pooneh