пул многопроцессорных Python не так быстро, как ожидалось - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть папка, которая содержит 12 видео, каждое из которых составляет 21 секунду, и все они идентичны (копии друг друга), я хочу извлечь каждый их кадр и записать его на диск как изображение JPG, так как это тяжелый работа, которую я пытался распараллелить извлечение кадра как

import os
import uuid
import cv2
from multiprocessing import Pool
from functools import partial
import time


def poolvid(wrtpth, pth):
    cap = cv2.VideoCapture(pth)
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            cv2.imwrite(wrtpth + '/' + str(uuid.uuid4()) + '.jpg', frame)
        else:
            break


def pooldo():
    pth = '/media/mark/m/op1/vid'
    wrtpth = '/media/mark/m/op1/im12'
    listfiles = os.listdir(pth)
    apth = [os.path.abspath(pth + '/' + x) for x in listfiles]
    func = partial(poolvid, wrtpth)
    pool = Pool(processes=2)
    pool.map(func, apth)

s = time.time()
pooldo()
print (time.time()-s)

`

Я ожидаю, что этот код сократит время выполнения примерно вдвое, поскольку я использую 2 процесса, но вывод из кода выше составляет около 53, а при последовательном извлечении кадров - 66, так в чем же проблема? как это решить?

...