Многопоточность обработки изображений в Python - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть приложение для обработки изображений, написанное на 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 только при создании нового вывода.Что я должен изменить в этом конвейере?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...