python socketio.start_background_tast 卡住句柄消息

python socketio.start_background_tast stunk handdle message

我准备用flask.socketio建一个工程,发现不对,代码如下

@socketio.on('message')
def handle_message(message):
    if 'self' in message:
        flag = 1
        @copy_current_request_context
        def movingcamera():
            global flag, status
            print('Start moving')
            while flag:
                GPIO.output(3, move[status][0])
                GPIO.output(2, move[status][1])
                if status == 2:
                    break
        socketio.start_background_task(target=movingcamera)

@socketio.on('moving')
def handle_moving(message):
    global status
    if 'up' in message:
        print('Got up message')
        status = 1
        time.sleep(2)
        status = 0
    elif 'down' in message:
        print('Got down message')
        status = -1
        time.sleep(2)
        status = 0
    elif 'mid' in message:
        status = 2

上面的代码是关于控制机器并通过sockerio.As获得控制消息我发送'self'到后端,它开始工作,然而,在那之后,无论我发送什么都不再处理. 我的操作如下: enter image description here 首先我发送 'moving' 'up' ,后端收到消息并打印 'Got up message'。其次我发送 'message' 'move' 启动机器,后端收到消息然后打印'recieved message:self',之后不管我怎么发'moving'还是'message',都处理不成功给我回复。

请问是不是我的代码或操作有问题。或者是因为 'socketio.start_background_test function'?

start_background_task stunk 的原因是 'while 1',可能是因为时间片在这个 while 循环中耗尽了。所以,只要在while循环中加入一个“socketio.sleep(0.5)”就可以解决这个问题easily.Just,代码如下:

@socketio.on('message')
def handle_message(message):
    if 'self' in message:
        flag = 1
        @copy_current_request_context
        def movingcamera():
            global flag, status
            print('Start moving')
            while flag:
                GPIO.output(3, move[status][0])
                GPIO.output(2, move[status][1])
                socketio.sleep(0.5)
                if status == 2:
                    break
        socketio.start_background_task(target=movingcamera)

@socketio.on('moving')
def handle_moving(message):
    global status
    if 'up' in message:
        print('Got up message')
        status = 1
        socketio.sleep(2)
        status = 0
    elif 'down' in message:
        print('Got down message')
        status = -1
        socketio.sleep(2)
        status = 0
    elif 'mid' in message:
        status = 2