在大列表上使用apply_async时,处理速度很慢

时间:2019-02-28 16:29:41

标签: asynchronous multiprocessing pool

我正在写一些东西来处理一堆图像。我想使用一个多处理池来加速它。

在两个不同长度的列表上运行相同的代码时,处理功能完成的速率不同。

例如,在小列表(4张图像)上运行时,基本上立即并同时处理了四个图像,但是在大列表(1000张)上运行时,进程似乎按顺序运行。列表中的前四张图像大约需要4秒钟才能完成。

为什么池突然开始按顺序处理事情?

这是我的代码:

        def func(*args):
            ... # complex image processing

        frames = np.array([...]) # array of images (pixel data)
        noise = np.array([...]) # single image (pixel data)
        output_path = "some_path"
        pool = Pool(processes=4)
        for i, img in enumerate(frames):
            noise = np.array([...])
            a = pool.apply_async(func, args=(i, img, output_path, noise)

        pool.close()
        pool.join()

有什么想法吗?

0 个答案:

没有答案