Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2014 22:50:10

GTSlade
Зарегистрирован: 2014-05-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

Подскажите, есть ли способ заставить процессы параллельно работать и изменять один двумерный массив? Т.е. первый процесс работает с первой четвертью строк, второй со второй четвертью и т.д.
Как это компоновать с помощью Queue из multiprocessing я не представляю.

Офлайн

#2 Май 26, 2014 00:00:35

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

GTSlade
моя мысль: если действия процессов не затрагивают общие элементы списка т.е. не перекрываются, то ничего не надо делать, т.к. процессы не имеют общих ресурсов.
Более опытные в параллелизме товарищи поправят, если я не прав.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Май 26, 2014 09:41:01

GTSlade
Зарегистрирован: 2014-05-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

JOHN_16
В том то и дело, что пограничные строки используются всеми процессами.
На данный момент вопрос: как вообще поместить двумерный массив в очередь?

Офлайн

#4 Май 26, 2014 10:24:37

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

http://habrahabr.ru/post/167503/ Посмотрите, может быть поможет.

Офлайн

#5 Май 26, 2014 11:48:31

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

GTSlade
Т.е. первый процесс работает с первой четвертью строк, второй со второй четвертью и т.д.
Судя по этому предложению, у каждого процесса определённые элементы списка.
GTSlade
В том то и дело, что пограничные строки используются всеми процессами.
А тут ты говоришь, что есть элементы, с которыми должны работать несколько процессов.

Как на самом деле?

GTSlade
На данный момент вопрос: как вообще поместить двумерный массив в очередь?
Разделить его на части, так как нужно, например на строки и грузить их.



Офлайн

#6 Май 26, 2014 20:37:47

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

GTSlade
как вообще поместить двумерный массив в очередь?
Не обязательно помещать его в очередь.
Budulianin
Разделить его на части, так как нужно, например на строки и грузить их.
Для таких операций есть shared memory. Размещайте чего хотите и пользуйтесь из скольких хотите процессов (кстати не обязательно питоновских).
Есть еще альтернатива:
https://docs.python.org/2/library/mmap.html



Отредактировано doza_and (Май 26, 2014 20:42:51)

Офлайн

#7 Май 26, 2014 22:33:43

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

doza_and
Для таких операций есть shared memory.

Shared memory используется, если нескольким процессам нужно работать с одними данными.
А тут каждому процессу нужно дать определённую часть матрицы.
Или нет?



Офлайн

#8 Май 27, 2014 22:02:23

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

Budulianin
Или нет?
Процессы могут получить доступ ко всем данным (разделяют их), но могут работать и с любой их частью. Поэтому можно показать им все данные а там пусть сами разбираются кто какую часть обрабатывает.
GTSlade
и изменять один двумерный массив?
Это похоже как раз то что хотел ТС. в памяти будет один массив и разные процессы будут менять именно его.



Отредактировано doza_and (Май 27, 2014 22:03:02)

Офлайн

#9 Май 27, 2014 22:29:39

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

doza_and
Поэтому можно показать им все данные а там пусть сами разбираются кто какую часть обрабатывает.

Зачем вообще тогда Queue, если можно использовать shared memory?
Может Queue быстрее будет? Например, пока один процесс подключен к shared memory и делает вычисления, чтобы изменить что-то, другие процессы ждут. А из Queue процессы берут объекты и работают с ними параллельно.



Офлайн

#10 Май 28, 2014 07:09:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Процессы и двумерный массив

Budulianin
Может Queue быстрее будет?
Что shared mem быстрее проверялось неоднократно. Queue обеспечивает синхронизацию. С разделяемой памятью вы сами должны следить чтобы один процесс не испортил результаты другого процесса.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version