2015-03-06 3 views
0

Я запускаю 7 рабочих процессов на одной машине с 4 ядрами. Я, возможно, сделал плохой выбор с этим циклом, ожидая результат map_async:IPython.parallel клиент висит в ожидании результата map_async

while not result.ready(): 
    time.sleep(10) 
    for out in result.stdout: 
     print out 
rec_file_list = result.get() 

result.stdout продолжает расти со всеми отпечатками из 7 процессов, запущенных, и это привело к консоли, вызвавшее карту, чтобы повесить , Монитор активности на моем MacBook Pro показывает, что все 7 процессов все еще запущены, а терминал, на котором работает контроллер, по-прежнему активен. Какие у меня варианты? Есть ли способ получить результат после завершения процессов?

ответ

1

Я нашел ответ: Remote самоанализа объектов AsyncResult можно от другого клиента до тех пор, как «серверной базы данных» был включен контроллером с:

ipcontroller --dictb # or --mongodb or --sqlitedb 

Затем можно создать новый экземпляр клиента и получить результаты с:

client.get_result(task_id) 

где task_ids можно получить с помощью:

client.hub_history() 

Кроме того, простой способ, чтобы избежать переполнения буфера я столкнулся, чтобы периодически печатать только последние несколько строк из истории стандартный вывод каждого двигателя, и очищать буфер, как:

from IPython.display import clear_output 
import sys 

while not result.ready(): 
    clear_output() 
    for stdout in result.stdout: 
     if stdout: 
      lines = stdout.split('\n') 
      for line in lines[-4:-1]: 
       if line: 
        print line 
    sys.stdout.flush() 
    time.sleep(30) 
Смежные вопросы