2017-08-29 261 views
-2

我正在做一個可以使用樹莓和python進行遠程控制的機器人。並行處理Python

我有一個Flask Rest API運行在服務器上,當用戶按下按鈕時,命令發送給機器人。假設我按下按鈕向前移動,機器人只能在所有傳感器未檢測到任何靠近物體的情況下移動。機器人繼續運行,直到按下停止按鈕或任何傳感器到達物體。

我的疑問是: 如何讓API代碼監聽任何請求,並讓傳感器同時測量距離?如果機器人正在運行,我認爲我應該做一個「真正的」,直到傳感器到達一個物體,但它會鎖定程序,如果我按下停止按鈕,它將不會停止,因爲無限循環...

每當機器人向任何方向移動時,我都需要傳感器處於活動狀態,並且API同時收聽。

我搜索了多處理和子流程模塊,但並不完全是我需要做的。

有什麼建議嗎?

謝謝

+0

您是否探索過python的線程模塊? –

+0

你可以在'while run_flag:if detect_object:do_move()'中啓動一個線程,並且'run_flag'可以從'request'設置的'thread_global_var/pipe/cache/db'獲得。 – Cheney

回答

1

多線程可能是你想要的。

下面是一個非常簡單的例子,你可以在屏幕上看到線程2打印'2'。

import threading 
import time 

def loopfunc1(): 
    time.sleep(3) 
    print('1') 

def loopfunc2(): 
    print('2') 

# launch thread 1 
t = threading.Thread(target=loopfunc1) 
t.start() 

# not waiting thread 1 finish 
# launch thread 2 
# thread 2 print '2' on screen first 
t = threading.Thread(target=loopfunc2) 
t.start()