Я делаю программу, которая управляет двумя двигателями через малину Pi. Я бегу код питона и мне интересно, как добиться следующего:Ждите, пока потоки не закончатся, прежде чем запускать их снова
- Run MOTOR1
- Выполнить motor2 одновременно
- Подождите оба мотора, чтобы закончить
- Run MOTOR1
- Выполнить motor2 одновременно
и т. Д.
Что я сделал до сих пор, это создание Thread и использование очереди уе.
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()
Оба thread_1 и thread_2 не закончат в то же время, в зависимости от числа шагов нужно двигателя обрабатывать. Я попытался использовать функцию Lock(), но я не уверен, как правильно ее реализовать. Я также подумал о повторном создании потоков, но не уверен, что это правильное решение.
Пожалуйста, исправьте свои отступы, это нарушение, когда другой читает ваш код. –
Где вы удаляете Items из self.q и где вы его инициализируете, как q = Queue() – rocksteady
Да, инициализируется очередь в def __init__: self.q = Queue (maxsize = 0) (каждый поток имеет его собственная очередь); Я также делаю item = self.q.get() в моем методе run(), я обновляю свой код. – batmat