У меня есть скрипт python, написанный для python 2.7, работающий на моем Raspberry Pi. То, что я пытаюсь сделать, это двигаться вперед с моим шаговым двигателем и в то же время проверить, есть ли впереди квадрат. Чтобы эти вещи не мешали, я хочу переместить обработку изображения в ее собственный процесс и просто проверить, было ли изображение найдено, прежде чем предпринять дальнейшие шаги.
Это участвующие классы.
SharedImageDetectionValue
:
class SharedImageDetectionValue(object):
stored_has_position_found = False
def get_has_position_found(self):
return self.stored_has_position_found
def set_has_position_found(self, new_value):
self.stored_has_position_found = new_value
return self.stored_has_position_found
ImageProcessor
:
class ImageProcessor:
def __init__(self):
# constructor code
def run(self, shared):
# do image processing till found a square
shared.set_has_position_found(True)
Stepper
:
class Stepper(Observable):
def __init__(self):
# constructor code
def run_until_stopped(self, shared):
# some motor code
while self.running:
has_found = shared.get_has_position_found()
print("[ StepperH ] Value has found: " + str(has_found))
if not has_found:
self.do_steps(0.0005)
ProcessManager:
class ProcessManager(BaseManager):
pass
И я пытаюсь создать процесс с этим:
ProcessManager.register('SharedImageDetectionValue', SharedImageDetectionValue)
manager = ProcessManager()
manager.start()
shared = manager.SharedImageDetectionValue()
pool = Pool(1)
imgProcessor = ImageProcessor()
pool.apply_async(imgProcessor.run, args=(shared, ))
print("[ MAIN ] StepperH add to pool")
Stepper().run_until_stopped(shared)
В целях тестирования я непосредственно устанавливаю значение true в обработчике изображений, но в степпере оно остается False.
Я также попытался добавить Stepper
в пул, но мне показалось, что степпер не работал.
Также я попытался вызвать процессы через две вспомогательные функции, но с похожим эффектом:
def start_processing(passed_shared):
ImageProcessor().run(passed_shared)
def start_moving_to_target_platform(passed_shared):
StepperH().run_until_stopped(passed_shared)
Что я делаю не так?