Как контролировать количество процессов, открытых в Python - PullRequest
1 голос
/ 30 июня 2019

Моя главная цель - открыть 30 дочерних процессов из родительского процесса, а затем открыть неизвестное число новых процессов из каждого из этих 30 дочерних процессов.Я собираюсь вызвать redis для некоторых данных местоположения из этих новых дочерних процессов, и я не уверен, сколько раз мне нужно звонить, это будет 100 или более 1000. Когда я звоню более 1000 раз, я пересекаю страницупредел, ошибка:

OSError: [Errno 24] Too many open files

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

Вот мой код шаблона:

import multiprocessing
import time
from multiprocessing.dummy import Pool
from random import randint


class MultiProcessing():

    def second_calculation(self, index1, index2):
        random = randint(1, 10)
        time.sleep(random)
        print("Slept for: {} seconds".format(random))
        print("Call done: index: {} | index2: {}".format(index1, index2))

    def calculation(self, index):
        child_process = list()
        random = randint(1, 5)
        time.sleep(random)
        print("Slept for : {} seconds".format(random))

        counter = 0
        for i in range(0, 1500):
            counter += 1
            new_child_process = multiprocessing.Process(target=self.second_calculation, args=(index, counter))
            child_process.append(new_child_process)
            new_child_process.start()

        for process in child_process:
            process.join()

        print("Request done: {}".format(index))


if __name__ == '__main__':
    index = 0
    parent_process = list()
    m = MultiProcessing()
    for i in range(0, 30):
        index += 1
        print("Index: {}".format(index))
        new_process = multiprocessing.Process(target=m.calculation, args=(index,))
        parent_process.append(new_process)
        new_process.start()

    for process in parent_process:
        process.join()

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...