Ich mache ein Programm, das 2 Motoren durch einen Raspberry Pi steuert. Ich arbeite mit Python-Code und ich frage mich, wie die folgende erreichen:Warten Sie, bis die Threads fertig sind, bevor Sie sie wieder ausführen.
- Run motor1
- Run motor2 gleichzeitig
- Warten für beide Motoren
- Run beenden MOTOR1
- Run motor2 gleichzeitig
usw.
Was ich bisher gemacht habe, ist ein Thread erstellen und eine que verwenden Ue.
class Stepper(Thread): def __init__(self, stepper): Thread.__init__(self) self.stepper = stepper self.q = Queue(maxsize=0) def setPosition(self, pos): self.q.put(pos) def run(self): while not self.q.empty(): item = self.q.get() // run motor and do some stuff thread_1 = Stepper(myStepper1) thread_2 = Stepper(myStepper2) thread_1.start() thread_2.start() loop = 10 while(loop): thread_1.setPosition(10) thread_2.setPosition(30) # I want to wait here thread_1.setPosition(10) thread_2.setPosition(30) loop = loop - 1 thread_1.join() thread_2.join()
Sowohl Thread_1 und Thread_2 wird zugleich abhängig von der Anzahl der Stufen der Motor Notwendigkeit zu verarbeiten nicht beenden. Ich habe versucht, die Lock() -Funktion zu verwenden, aber ich bin mir nicht sicher, wie man es richtig umsetzt. Ich dachte auch darüber nach, die Threads neu zu erstellen, bin mir aber nicht sicher, ob dies die richtige Lösung ist.
Bitte korrigieren Sie Ihre Einrückungen, es ist Störung, wenn andere Ihren Code liest. –
Wo entfernst du Items von self.q und wo initialisierst du es wie q = Queue() – rocksteady
Ja, die Warteschlange wird im def __init__ wie folgt initialisiert: self.q = Queue (maxsize = 0) (jeder Thread hat eine eigene Warteschlange); Ich mache auch ein Item = self.q.get() in meiner run() Methode, ich werde meinen Code aktualisieren. – batmat