Запуск множества процессов, изменяющих один и тот же список с помощью Python Многопроцессорность, приводит к OSError: слишком много открытых файлов - PullRequest
0 голосов
/ 12 июля 2020

Я не могу добиться успешного выполнения следующего кода, что всегда приводит к следующей ошибке:

OSError: [Errno 24] Too many open files
with the most recent call on p.start()

Как вы можете видеть, я уже пытался выполнить процессы кусками по 500, поскольку они работать нормально, когда выполняется только 500, однако после второго l oop я все еще получаю указанную выше ошибку. Я предполагаю, что процессы не закрываются должным образом после выполнения, однако я не мог понять, как их проверить и правильно закрыть ...

вот мой код:

import multiprocessing

manager = multiprocessing.Manager()
manager_lists = manager.list()


def multiprocessing_lists(a_list):
    thread_lists = []
    for r in range(400):
        thread_lists.append(a_list)
    manager_lists.extend(thread_lists)


manager = multiprocessing.Manager()
manager_lists = manager.list()
processes = []
counter = 0
chunk_size = 500
all_processes = 4000


for i in range(0, all_processes, chunk_size):

    for j in range(chunk_size):
        a_list = [1,2,3,4,5,6,7,8,9]
        p = multiprocessing.Process(target=multiprocessing_lists, args=(a_list,))
        processes.append(p)
        p.start()

        counter += 1
    for process in processes:
        process.join()
        process.terminate()


print(len(manager_lists))
...