2014-01-23 3 views
0

Я новичок в python и параллельной обработке. Для этого я использую Parallel Python. Проблема в том, что у меня есть 4 задания, которые должны быть созданы, чтобы создать 4 маски и умножить их на мое входное изображение при дальнейшей обработке. Ниже приведен фрагмент кода, написанного для параллельной обработки.Параллельный Python не дает ошибок, но параллельная обработка не выполняется

inputs = range(4) 
jobs = [(inpt, job_server.submit(PP, (inpt,input_data,size,(imageMultiply,blockCounter,imageQuantizer), ("numpy","Image"))) for inpt in inputs] 
job_server.print_stats() 
for inpt, job in jobs: 
    print "No of blocks in ", inpt, "is", job() ## accessing the result of pp 

Вывод, который я получаю:

Starting pp with 4 workers 
Job execution statistics: 
job count | % of all jobs | job time sum | time per job | job server 
     4 |  100.00 |  0.0000 |  0.000000 | local 
Time elapsed since server creation 0.0219678878784 
4 active tasks, 4 cores 

No of blocks in 0 is 52 
No of blocks in 1 is 61 
No of blocks in 2 is 104 
No of blocks in 3 is 48 

Я не могу понять, что если его не обрабатывает одновременно, до сих пор я могу получить желаемый результат, но время, потраченное слишком большой, который является почему я хочу использовать pp. Пожалуйста, помогите мне в этом, чтобы я мог успешно сократить время. Спасибо заранее ...

+0

Вы должны также назвать 'print_stats()' после того, как все рабочие места соединяются с 'работы()'. Затем вы можете сравнить прошедшее время, измеренное с помощью Parallel Python и без него. Когда вы говорите: «время слишком велико», никто не может сказать, насколько он велик; 1 мин, 1 час, 1 день, ... – nodakai

+0

@nodakai Я написал print_stats() после последней строки и получил следующие результаты: Статистика исполнения: кол-во вакансий | % всех рабочих мест | сумма рабочего времени | время на работу | сервер заданий 4 | 100,00 | 16.0401 | 4.010028 | local Время, прошедшее с момента создания сервера 4.04183793068 0 активных задач, 4 ядра – pypro

ответ

0

От вашего print_stats() выхода (переформатирован здесь)

Job execution statistics: 
job count | % of all jobs | job time sum | time per job | job server 
     4 |  100.00 |  16.0401 |  4.010028 | local 
Time elapsed since server creation 4.04183793068 
0 active tasks, 4 cores 

кажется, что все будет в порядке. У вас 4 ядра процессора; вы можете выполнить 4 задания в течение 4 секунд после создания сервера задания; система потребляла 16 CPU секунд, чтобы получить все выполненные задания.

Возможно, вы захотите попробовать top -H, htop или Windows Sysinternals Process Monitor, чтобы наблюдать за потреблением процессора в реальном времени.

+0

спасибо за то, что привлекло это к моему сведению..Но у меня мало сомнений: 1) Как вы уже указали, «система потребляла 16 CPU секунд в общей сложности, чтобы получить все рабочие задания ", не означает ли это, что без pp процессор займет 16 секунд, а после использования 4 рабочих система займет всего 4 секунды, чтобы получить все задания? 2) В каждом из 4 заданий, которые я назначил, я показываю обработанное изображение моего входного изображения. Таким образом, после выполнения моего кода все 4 изображения должны отображаться одновременно из-за использования pp. Но я вижу они поп последовательно. Что я могу сделать из этого? PLZ помочь мне понять – pypro

+0

1) Да, это то, что я имел в виду. Можете ли вы попробовать передать 'ncpus = 1', когда вы создаете экземпляр объекта' Server', чтобы узнать, сколько времени потребуется с 1 процессором? 2) Не знаю, может быть, ОС должна сериализовать операции ввода-вывода на диске при доступе к выходным файлам изображений? Опять же, почему бы вам просто не использовать мониторы использования процессора, как показано выше? Какую платформу вы используете, Linux, OS X или Windows? – nodakai

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

  • Нет связанных вопросов^_^