У меня есть приложение для обработки изображений, написанное на python, которое выполняет следующее:
- получает изображение I с камеры
- выполняет этап обработки P1 для I, получая I1
- выполняет еще один этап обработки P2 на I1, получение I2
P1 и P2 выполняется с помощью внешних сопроцессоров USB.Я хочу использовать многопоточность для параллельного запуска P1 и P2.Моя идея состоит в том, чтобы установить I, I1 и I2 в качестве глобальных переменных и сделать что-то вроде этого:
Поток камеры:
while alive:
lock.acquire()
I = videoCapture.read()
lock.release()
Поток P1:
while alive:
lock.acquire()
I1 = doSomeProcessing(I)
lock.release()
P2поток:
while alive:
lock.acquire()
I2 = doOtherProcessing(I1)
lock.release()
Основной поток:
CameraThread.start()
P1Thread.start()
P2Thread.start()
while True:
lock.acquire()
doSomething(I2)
lock.release()
Первый поток имеет более высокую скорость выполнения, в то время как два других аналогичны.Сейчас я хочу, чтобы P1 обрабатывал самое последнее изображение (это нормально, если изображения пропускаются), и мне все равно, обрабатывает ли P2 один и тот же I1 дважды или P2 пропускает некоторые изображения.
Я новичокмногопоточности, и я не уверен, что это правильная логика для оптимизации выполнения.В частности, основной поток должен извлекать I2 только при создании нового вывода.Что я должен изменить в этом конвейере?