2017-08-29 33 views
-2

私は、ラズベリーとパイソンを使って遠隔操作できるロボットをやっています。並列処理Python

私は、ユーザーがボタンを押したときにロボットにコマンドを送信するサーバーでFlask Rest APIを実行しています。ボタンを押して前方に移動すると、ロボットはすべてのセンサーが近くの物体を検出しない場合にのみ移動することができます。ストップボタンが押されるか、センサが物体に到達するまで、ロボットは動作を続けます。

私の疑いは: どのようにリクエストを聞いてもAPIコードを保持し、センサーが距離を同時に測定し続けることができますか?ロボットが走っていれば、センサが物体に到達するまで「真実」を実行すべきだと思ったが、プログラムをロックし、停止ボタンを押すと無限ループのため停止しない。

ロボットがいずれの方向に移動していても、センサーをアクティブにする必要があり、同時にAPIをリッスンする必要があります。

私はマルチプロセッシングモジュールとサブプロセスモジュールについて検索しましたが、正確には何をする必要はありません。

提案がありますか?

ありがとうございました

+0

あなたはPythonのスレッドモジュールを探索しましたか? –

+0

'while run_flag:if detect_object:do_move()'でスレッドを開始することができ、 'request'から設定した' thread_global_var/pipe/cache/db'から 'run_flag'を得ることができます。 – 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()