Только 2 из 100 дочерних процессов получают процессор в многопроцессорной программе - PullRequest
0 голосов
/ 20 мая 2018

ПРОБЛЕМА СТАЛА:

У меня есть программа, которая подключается к серверу и отправляет хэш для поиска и возвращает какое-то изменение.

В моей текущей настройкеУ меня есть базовая система, которая отправляет запросы на сервер каждый из 1 в количестве.Таким образом, чтобы сделать несколько поисков, я использовал многопроцессорность в python, чтобы запустить 100 процессов, которые inturn выполняет поиск. Когда спустя некоторое время, когда я хочу узнать, как ведут себя мои дочерние процессы, выполняются CPU и Memory Stats, которые показывают интересное поведение только2 из 100 детей получают процессор и память, а отдых всегда равен 0.0.

Кто-нибудь знает, что происходит?Что-то не так с моей реализацией.

КОД SNIPPET

def start_scan(files):
        """
        Multiprocessing scanner
        """
        try:
                for filedata in files:
                        start = time.time()
                        res = scan(os.path.join('/home/something/test/'+ filedata))
                        with open('result_clean.csv' , 'a') as f:
                                data_in_file = "Result {} for file {}".format(str(res),filedata)
                                f.write(data_in_file)
                                f.write('\n')

                        end = time.time()
                        logger.info('File {} took {} for processing'.format(filedata,end-start))
        except Exception as e:
                logger.error('Error in scanning files {}'.format(str(e)))

def clean_(self,worker=100):
    pool = mp.Pool(processes=worker)
    start = time.time()
    input_files = []
    file_path = self.folder_clean_scan
    input_files.append(os.listdir(file_path))
    targetLists = []
    count = 0
    for i in range(0, 1):
            if (i < ( len(input_files) % 1)):
            # This one gets a remainder
                    targetLists.append(input_files[count:(count + 1 + ( len(input_files) / 1))])
                    count += 1 + ( len(input_files) / 1)
            else:
            # No remainder
                    targetLists.append(input_files[count:(count + ( len(input_files) / 1))])
                    count += len(input_files) / 1
    #print targetLists[0]
    results = [ pool.apply_async(start_scan,
            args=(x)) \
            for x in targetLists ]

    try:

            output = [ p.get() for p in results ]
            print output
    except:
            traceback.print_exc()
    end = time.time()
    print end -start

ИНФОРМАЦИЯ ПО ПАМЯТИ ПАМЯТИ

ps -ax -o %cpu,%mem,cmd | grep app
 0.8  0.0 python app.py
 3.3  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
 0.0  0.0 python app.py
...