在準備使用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 獲取控制訊息。當我將“自我”發送到后端時,它開始作業,但是,在那之后,無論我發送什么都不再是處理。我的操作如下: 在這里輸入圖片描述 首先我發送'moving''up',后端得到訊息并列印'Got up message'。其次我發送'message''move'啟動機器,后端得到訊息并列印'received message:self',之后,無論我如何發送'moving'或'message',它都無法成功處理并給我回復。
我想知道我的代碼或操作是否有問題。還是因為“socketio.start_background_test 函式”?
uj5u.com熱心網友回復:
start_background_task stunk 是 'while 1' 的原因,可能是因為時間片完全花在了這個 while 回圈中。因此,只需在 while 回圈中添加“socketio.sleep(0.5)”即可輕松解決此問題。就像代碼如下:
@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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/409321.html
標籤:
