2010-09-09 2 views
1

У меня есть python2.5 и multiprocessoring (получить от http://code.google.com/p/python-multiprocessing/)python2.5 многопроцессорная бассейн

Этот простой код (получить из документации), работает очень странно, время от времени, иногда это хорошо, но иногда бросить тайм-аут ex или повесить мою Windows (Vista), только сброс помогает :) Почему это может случиться?

from multiprocessing import Pool 

def f(x): 
    print "fc",x 
    return x*x 
pool = Pool(processes=4) 
if __name__ == '__main__': 
    result = pool.apply_async(f, (10,))  # evaluate "f(10)" asynchronously 
    print result.get(timeout=3)   # prints "100" unless your computer is *very* slow 

ответ

4

Это просто дикое предположение, но вы пытались переместить Pool создание в if блока? Я подозреваю, что в противном случае это может породить неограниченное количество новых процессов, что приведет к замораживанию.

+1

Я боялся снова начать это :), но он работает! thanx) действительно тянуть создавало снова и снова, и это зависает. – Evg

+0

@nikow: Почему процессы порождались бесконечно? Я могу видеть 4 начальных детей, каждый из которых создает новый пул из 4 детей при импорте программы, но я не вижу, как они будут запускать основной код и называть 'f' для каждого из своих детей ... – EOL

+0

@EOL: Я подозреваю что в каждом дочернем модуле выполняется код модуля. Каждый раз, когда создается новый пул, появляются 4 новых ребенка. У меня это случилось на моей машине и увидел очень большое количество процессов Python до того, как машина замерла. – nikow

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