Скорость процесса медленная, когда apply_async используется в большом списке - PullRequest
0 голосов
/ 28 февраля 2019

Я пишу что-то, чтобы обработать кучу изображений.Я хотел бы использовать многопроцессорный пул для его ускорения.

При запуске одного и того же кода для двух списков разной длины скорость выполнения функции обработки отличается.

ДляНапример, при запуске его в небольшом списке (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()

Есть идеи?

...