Проблемы со связью Celery Worker и Socket ioPython

Программы на Python
Ответить
Anonymous
 Проблемы со связью Celery Worker и Socket io

Сообщение Anonymous »

Я пытаюсь создать приложение с несколькими сокетными соединениями и использовать работники сельдерея для периодической отправки им сообщений. Вот код:
app.py

Код: Выделить всё

from Controllers.MediaController import media_controller_bp
import logging
import Config
from celery import Celery,Task
from utils import make_celery
from Controllers.socketio_instance import socketio

# from Controllers.socketio_instance import socketio

def create_app():
app = Flask(__name__)

# Load configuration
app.config.from_object(Config.Config)

# app.config.from_mapping(
#     CELERY=dict(
#         broker_url="redis://localhost/6379/0",
#         result_backend="redis://localhost/6739/0",
#         task_ignore_result=True,
#     ),
# )

app.config["CELERY_CONFIG"] = {
'broker_url': 'redis://localhost:6379/0',
'result_backend':  'redis://localhost:6379/0',
'task_ignore_result': True,
'redbeat_lock_key' :None,
'redbeat_redis_url' : 'redis://localhost:6379/1'

}
socketio.init_app(app)
celery = make_celery(app)
celery.set_default()
# Register blueprints or routes
# app.register_blueprint(media_controller_bp, url_prefix='/api')
app.register_blueprint(spotify_controller_bp, url_prefix='/spotify')
app.register_blueprint(media_controller_bp)

# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

return app,celery

app,celery= create_app()
# app.app_context().push())

if __name__ == '__main__':
# app.run()
socketio.run(app)
controller.py

Код: Выделить всё

#use socket io to send message to user
def send_message_to_user(spectacles_device_id, message):
socketio.emit('message', {'data': message}, room=spectacles_device_id)
return 'Triggered', 200
импорт обоих файлов:
socketio_instance.py

Код: Выделить всё

from flask_socketio import SocketIO

socketio = SocketIO()
Соединение устанавливается нормально, и я могу отправлять сообщения через приложение flask, но работник celery вызывает метод send_message_to_user каждые 60 секунд и должен отправить сообщение. Однако ничего не происходит. Я знаю, что это как-то связано с тем, что у работника нет контекста, но я не могу понять, как это исправить.
Я пробовал другие ссылки на стек и шаблоны GitHub и ничего не работает

Подробнее здесь: https://stackoverflow.com/questions/793 ... ion-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»