#python #multiprocessing
#python #многопроцессорная обработка
Вопрос:
У меня есть программа на python opencv
gui
, которая использует многопроцессорную обработку в потоковой передаче в экземпляре класса.
После запуска приведенного ниже скрипта, когда я набираю q
текст, он завершает вспомогательный цикл и завершает или присоединяется ко всем существующим потокам, процессам и очереди закрытия в модулях.
И затем, если я введу r
, он снова запустит вспомогательный цикл, но на этот раз рабочий в многопроцессорной обработке выполняется в два раза медленнее. Я понятия не имею, почему это происходит.
код выглядит следующим образом.
module_started = False
height = 480
width = 800
img_base = np.zeros((height,width,3), np.uint8)
cv2.namedWindow("VIN", cv2.WINDOW_NORMAL)
while True:
if not module_started:
cam1 = PersonDetector(0)
cam1.start()
outputs = []
module_started = True
while True:
if cam1.new_detection:
outputs = cam1.get_output()
if outputs:
for xys in outputs:
(startX, startY, endX, endY) = xys
cv2.rectangle(cam1.frame, (startX, startY), (endX, endY), (255,5,150),2)
# show the output image
cv2.imshow("VIN", cam1.frame)
key = cv2.waitKey(40) amp; 0xFF
# if the `q` key was pressed, break from the loop
if key == ord("q"):
break
cam1.stop()
del cam1
# show the output frame
cv2.imshow("VIN", img_base)
key = cv2.waitKey(40) amp; 0xFF
if key == ord("e"):
break
if key == ord("r"): # go back to start sub loop
module_started = False
cv2.destroyAllWindows()
он находится на Raspberry pi 4. он имеет ядро cpu 4.
в первый раз htop показывает процент процессора более 300%
, но во второй раз htop показывает процент процессора всего 99 или 100%…
почему это происходит?
Ответ №1:
Я тестировал сам целый день. Это было не из-за многопроцессорности или многопоточности.
Это было из-за cv2.imshow(), я удалил imshow, тогда все сохраняло ту же скорость, но при повторении imshow, как в приведенном выше коде, программа отключается, хотя я до сих пор не знаю, почему…