从 SocketIO 连接事件调用 Celery 任务

问题描述 投票:0回答:1

我想在 websocket 客户端连接到套接字服务器时调用我的 celery 任务。当我尝试从连接事件中调用它时,它会导致应用程序超时并且客户端不会收到发射。

以下是应用程序的代码示例:

from flask import Flask
from flask_socketio import SocketIO
import eventlet
from celery import Celery
import time

eventlet.monkey_patch(socket=True)
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
socketio = SocketIO(app, async_mode='eventlet', logger=True, engineio_logger=True, message_queue='redis://127.0.0.1:6379' )

celery = Celery(app.name, broker='redis://127.0.0.1:6379')
celery.conf.update(app.config)

@app.route('/')
def home():
    return 'Hello World!'

@socketio.on('connect')
def connect():
    print('Client connected, calling celery task...')
    celeryTask(1,2)

@celery.task()
def celeryTask(x,y):
    print('Celery task called!')
    local_socketio = SocketIO(app, logger=True, engineio_logger=True, message_queue='redis://127.0.0.1:6379')
    while True:
        local_socketio.emit('add', {'data': x+y})
        time.sleep(60)

if __name__ == '__main__':
    socketio.run(app, debug=True)

任何帮助将不胜感激!

python flask celery flask-socketio
1个回答
0
投票

也许尝试将@celery.task() 放在@socketio.on('connect') 之前。这可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.