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
我准备用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