2017-08-29 4 views
-2

Je fais un robot qui peut être contrôlé à distance en utilisant framboise et python.Processus parallèle Python

J'ai une API Flask Rest exécutée dans un serveur qui envoie des commandes au robot lorsque l'utilisateur appuie sur les boutons. Dites que j'appuie sur le bouton pour avancer, le robot ne peut bouger que si tous les capteurs ne détectent aucun objet proche. Le robot continue à fonctionner jusqu'à ce que le bouton d'arrêt soit enfoncé ou qu'un capteur atteigne un objet.

Mon doute est: Comment puis-je garder le code API à l'écoute de toute demande, et garder les capteurs mesurant les distances en même temps? Si le robot fonctionne, je pensais que je devrais faire un "while true" jusqu'à ce que le capteur atteigne un objet, mais il verrouillera le programme et si j'appuie sur le bouton stop il ne s'arrêtera pas à cause de la boucle sans fin ...

Chaque fois que le robot se déplace dans n'importe quelle direction, j'ai besoin que les capteurs soient actifs et que l'API écoute en même temps.

J'ai recherché des modules de multiprocessing et de sous-processus, mais pas exactement ce que j'ai besoin de faire.

Des suggestions?

Merci

+0

avez-vous exploré le module de threading de python? –

+0

vous pouvez démarrer un thread dans 'while run_flag: si detect_object: do_move()', et 'run_flag' peuvent être obtenus à partir de' thread_global_var/pipe/cache/db' à partir de 'request'. – Cheney

Répondre

1

Multiples threads probablement ce que vous voulez. Ci-dessous est un exemple très simple pour vous, vous pouvez voir le fil 2 imprimer '2' à l'écran d'abord.

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()