python socketio отправляет данные из другого потока, которые НЕ определены в том же коде - PullRequest
0 голосов
/ 25 февраля 2020

Я собираюсь использовать websockets в проекте, который я пишу, используя python flask, поэтому я пытаюсь использовать socketio, я использую этот пример в качестве шаблона https://raw.githubusercontent.com/miguelgrinberg/Flask-SocketIO/master/example/app.py

Он устанавливает новый поток, определенный в том же файле, что и маршруты и socketio.run, как показано ниже, и, как и ожидалось, каждый emit получает отправку:

def background_thread():
    """Example of how to send server generated events to clients."""
    count = 0
    while True:
        socketio.sleep(10)
        count += 1
        socketio.emit('my_response',
                      {'data': 'Server generated event', 'count': count},
                      namespace='/test')
..
..
@socketio.on('connect', namespace='/test')
def test_connect():
    global thread
    with thread_lock:
        if thread is None:
            thread = socketio.start_background_task(background_thread)
    emit('my_response', {'data': 'Connected', 'count': 0})

Однако я бы хотелось бы, чтобы фоновый поток был определен в другом месте в моей кодовой базе, но когда я перемещаю background_thread в другой исходный файл, все выбросы завершаются неудачно в socketio \ base_manager.py emit (первая строка), потому что ни одно из комнат или пространств имен не было настроено.

Что мне нужно вставить в функцию потока, чтобы получить правильную настройку контекстов?

TIA.

(windows 10, python 3.7, flask 1.1.1, flask -socketio 4.2.1)

...