flask-socketio испускает из фоновой задачи не испускает

Ниже приведен мой фрагмент кода, я запускаю фоновую задачу и хочу выдать идентификатор при вызове события.

управлять.py

from threading import Lock 

continue_reading = True
thread = None
thread_lock = Lock()

socketio = SocketIO(app, cors_allowed_origins='*', logger=True, engineio_logger=True, **params)

def background_task(app):
    with app.app_context():
        while continue_reading:
            id = setup_rfidreader() 
            logging.debug("chip id from bg {}".format(id)) 
            socketio.emit('chip was readed', {"timestamp": id} )

@socketio.on('read_card')
def handle_read_card_event(): 
    global thread
    with thread_lock:
        if thread is None:
            thread = socketio.start_background_task(background_task, current_app._get_current_object())

Почему фоновая задача не позволяет вызывать другие события?

def setup_rfidreader():
    reader = SimpleMFRC522()
    print("Hold a tag near the reader")
    try:
        id, text = reader.read()
        sleep(.5)
        print(id)
        return id
    except KeyboardInterrupt:
        print('interrupted')
    finally:
        GPIO.cleanup()

person Elad    schedule 07.06.2020    source источник
comment
Вы используете eventlet или gevent? Если да, вы можете проверить, совместимо ли что-либо с setup_rfidreader(). Судя по вашему описанию, эта функция может быть функцией блокировки.   -  person Miguel    schedule 10.06.2020
comment
Я использую eventlet. Я обновил вопрос с помощью кода setup_rfidreader().   -  person Elad    schedule 10.06.2020
comment
Хорошо, что делает setup_rfidreader()? Это блокирует?   -  person Miguel    schedule 10.06.2020
comment
Он в основном считывает из rpi GPIO идентификатор чипа (rfid). ничего не блокирует   -  person Elad    schedule 10.06.2020
comment
я должен также включить очередь Redis? Считается ли это выбросом из внешнего процесса? Я не мог понять это из документов   -  person Elad    schedule 10.06.2020
comment
Это была проблема с очередью Redis.   -  person Elad    schedule 10.06.2020


Ответы (1)


Кажется, что eventlet и URL-адрес redis не были настроены должным образом.

person Elad    schedule 10.06.2020