2016-01-22 4 views
1

Я просто работаю вокруг с многопроцессорной модуля Python, но следующий код работает непрерывно, но не дает никаких выходных. Что я делаю не так? Я также пробовал pool.close() и pool.join(), но без эффекта.не в состоянии использовать pool.apply_async()

Вот что я пытался до сих пор:

import multiprocessing as mp 
cpu_count = mp.cpu_count() 
pool = mp.Pool(processes = cpu_count) 

def func(val): 
    print "\nInside Function.....\n" 
    return val*val 

results = [] 
num = 1 
while cpu_count >= 1: 
    results.append(pool.apply_async(func, (num,))) 
    cpu_count = cpu_count - 1 
    num = num + 1 

output = [p.get() for p in results] 
print output 

ответ

0

Wrap код с

if __name__ == '__main__': 
    ... 

это необходимо, если вы работаете под окнами благодаря многопроцессорной реализации.

следующий код печатает [1, 4, 9, 16], как вы ожидали:

import multiprocessing as mp 

def func(val): 
    print "\nInside Function.....\n" 
    return val*val 

if __name__ == '__main__': 
    cpu_count = mp.cpu_count() 
    pool = mp.Pool(processes = cpu_count) 

    results = [] 
    num = 1 
    while cpu_count >= 1: 
     results.append(pool.apply_async(func, (num,))) 
     cpu_count = cpu_count - 1 
     num = num + 1 

    output = [p.get() for p in results] 
    print output 

    pool.close() 
    pool.join() 

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

+0

Это сработало, спасибо. –

+0

Почему печать "\ nInside Function ..... \ n" не работает? –

+0

Возможно, ваша функция IDE (я думаю, вы используете IDLE) с перенаправлением stdout. Сценарий печатает это сообщение, когда я запускаю его как из консоли Windows, так и из PyCharm. – Makc

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