python多处理池的速度没有预期的快

2024-10-01 00:17:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件夹,其中包含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,那么问题是什么呢?如何解决


Tags: fromimportuuidtimeosdefcv2partial