2015-03-06 2 views
1

Почему я вижу так много процессов python, работающих (в htop на RHEL 6) для того же скрипта, когда я использую только 1 ядро?Многопроцессорность Python: больше процессов, чем запрошено

enter image description here

Для каждой задачи, я инициализировать класс работник, который управляет обработкой. Он инициализация других классов, но не любые подпроцессов:

tasks = multiprocessing.JoinableQueue() 
    results = multiprocessing.Queue() 

    num_consumers = 1 

    consumers = [Consumer(tasks, results) for i in xrange(num_consumers)] 
    for i, consumer in enumerate(consumers): 
     logger.debug('Starting consumer %s (%i/%i)' % (consumer.name, i + 1, num_consumers)) 
     consumer.start() 

Примечания, atop показывает ожидаемое число процессов (в данном случае 2: ​​1 для родителя и 1 для детей). % MEM часто добавляет до 100%, поэтому я понимаю, что не понимаю, как работает многопроцессорная обработка или htop.

+3

Похоже, htop показывает вам каждую нить, проходящую внутри процесса. Сравните 'ps -ef' с' ps -eLf' ('-L' добавляет потоки к выходу). – dano

+2

В качестве альтернативы вы можете ввести 'H' в htop, чтобы скрыть/показать пользовательские потоки. –

+0

Темы! Спасибо, наверное, подумал об этом. –

ответ

0

Я считаю, что вы видите вспомогательные потоки, созданные модулем Multiprocessing в основном pid из вашего приложения. Это в дополнение к Threads/Processes, которые вы развернули явно.

Смежные вопросы