2015-05-12 2 views
2

Как получить результат из моего процесса без использования пула?Многопроцессорность Python 2.7 получить результат процесса без использования пула

(я готов сохранить глаз на прогрессировании:

(print "\r",float(done)/total,"%",) 

, который не может быть сделано с помощью пула, насколько я знаю)

def multiprocess(function, argslist, ncpu): 
    total = len(argslist) 
    done = 0 
    jobs = [] 
    while argslist != []: 
     if len(mp.active_children()) < ncpu: 
      p = mp.Process(target=function,args=(argslist.pop(),)) 
      jobs.append(p) 
      p.start() 
      done+=1 
      print "\r",float(done)/total,"%", 
    #get results here 
    for job in jobs: 
     job.get_my_result()??? 

Процессы очень короткий (< 0,5 секунды), но у меня около 1 миллиона из них.

Я видел эту тему Can I get a return value from multiprocessing.Process? Я попытался воспроизвести ее, но я не смог заставить ее работать правильно.

Всюду в вашем распоряжении для получения дополнительной информации.

+1

Что происходит, когда вы пытаетесь запустить решение от другого Qu estion? – SuperBiasedMan

ответ

2

Этот вопрос может рассматриваться как дубликат, но в любом случае здесь является решение моей проблемы:

def multiprocess(function, argslist, ncpu): 
    total = len(argslist) 
    done = 0 
    result_queue = mp.Queue() 
    jobs = [] 
    while argslist != [] and done<10 : 
     if len(mp.active_children()) < ncpu: 
      p = mp.Process(target=function,args=(result_queue, argslist.pop(),)) 
      jobs.append(p) 
      p.start() 
      done+=1 
      print "\r",float(done)/total,"%", 
    #get results here 
    res = [result_queue.get() for p in jobs] 
    print res 

и мне пришлось изменить, а на

return function_result 

в

result_queue.put(function_result) 
1

Самый простой способ - это очередь, которая передается как аргумент вашей функции. Результаты этой функции можно поместить в эту очередь, а позже вы можете перебирать эту очередь, чтобы собрать все результаты или обработать ее, как только придет результат. Однако он работает только тогда, когда вы можете работать с «неупорядоченными» результатами. Обратитесь к документации Python для деталей: Examples for Multiprocessing and Queues

+0

После купания во всех этих примерах я нашел свой путь, Thanx :) – Trolldejo

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