У меня есть папка, которая содержит 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, так в чем же проблема? как это решить?