Python 芹菜和烧瓶\u socketio消息在从芹菜内部发出的套接字任务中丢失
我遇到的问题是,我想向前端发送一条消息,但由于芹菜任务和主线程的工作,消息丢失了。print语句仅用于检查任务是否正在运行。调用芹菜任务来自uploadDatafilePython 芹菜和烧瓶\u socketio消息在从芹菜内部发出的套接字任务中丢失,python,flask,celery,flask-socketio,Python,Flask,Celery,Flask Socketio,我遇到的问题是,我想向前端发送一条消息,但由于芹菜任务和主线程的工作,消息丢失了。print语句仅用于检查任务是否正在运行。调用芹菜任务来自uploadDatafile def make_celery(app): celery = Celery( app.name, backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL']
def make_celery(app):
celery = Celery(
app.name,
backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL']
)
celery.conf.update(app.config)
class ContextTask(celery.Task):
def __call__(self, *args, **kwargs):
with app.app_context():
return self.run(*args, **kwargs)
celery.Task = ContextTask
return celery
app.config.update(
CELERY_BROKER_URL = 'amqp://',
CELERY_RESULT_BACKEND='amqp://'
)
socketio = SocketIO(app,cors_allowed_origins="*", message_queue='amqp://')
CORS(app)
@celery.task(name='app.add_together')
def add_together():
socketio = SocketIO(message_queue='amqp://')
print(50*'*')
time.sleep(5)
socketio.emit('traindata', {'data':'12', 'time': '14'},namespace='/test')
print(50*'*')
@app.route("/uploadDataFile", methods=["GET", "POST"])
def upload_file():
print(celery.tasks.keys())
if request.method == "POST":
# check if the post request has the file part
if "file" not in request.files:
response = make_response("No File Attached", 404)
return response
file = request.files["file"]
# if user does not select file, browser also
# submit an empty part without filename
if file.filename == "":
response = make_response("No File Selected", 404)
return response
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config["UPLOAD_FOLDER"], filename))
add_together.apply_async()
response = make_response("Uploaded File".format(filename))
return response
else:
response = make_response(
"Allowed file types ({}) only".format(".ndjson or .json"), 404
)
return response
return ""
if __name__ == "__main__":
sess = Session()
sess.init_app(app)
socketio.run(app,port=5000,debug=True)
代码在我看来没问题。您需要在客户端和服务器中启用Socket.IO日志,并跟踪此事件,以查看它被删除的位置以及原因。