我想在 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)
任何帮助将不胜感激!
也许尝试将@celery.task() 放在@socketio.on('connect') 之前。这可能会有所帮助。