Форум сайта python.su
Подскажите, есть ли способ заставить процессы параллельно работать и изменять один двумерный массив? Т.е. первый процесс работает с первой четвертью строк, второй со второй четвертью и т.д.
Как это компоновать с помощью Queue из multiprocessing я не представляю.
Офлайн
GTSlade
моя мысль: если действия процессов не затрагивают общие элементы списка т.е. не перекрываются, то ничего не надо делать, т.к. процессы не имеют общих ресурсов.
Более опытные в параллелизме товарищи поправят, если я не прав.
Офлайн
JOHN_16
В том то и дело, что пограничные строки используются всеми процессами.
На данный момент вопрос: как вообще поместить двумерный массив в очередь?
Офлайн
http://habrahabr.ru/post/167503/ Посмотрите, может быть поможет.
Офлайн
GTSladeСудя по этому предложению, у каждого процесса определённые элементы списка.
Т.е. первый процесс работает с первой четвертью строк, второй со второй четвертью и т.д.
GTSladeА тут ты говоришь, что есть элементы, с которыми должны работать несколько процессов.
В том то и дело, что пограничные строки используются всеми процессами.
GTSladeРазделить его на части, так как нужно, например на строки и грузить их.
На данный момент вопрос: как вообще поместить двумерный массив в очередь?
Офлайн
GTSladeНе обязательно помещать его в очередь.
как вообще поместить двумерный массив в очередь?
BudulianinДля таких операций есть shared memory. Размещайте чего хотите и пользуйтесь из скольких хотите процессов (кстати не обязательно питоновских).
Разделить его на части, так как нужно, например на строки и грузить их.
Отредактировано doza_and (Май 26, 2014 20:42:51)
Офлайн
doza_and
Для таких операций есть shared memory.
Офлайн
BudulianinПроцессы могут получить доступ ко всем данным (разделяют их), но могут работать и с любой их частью. Поэтому можно показать им все данные а там пусть сами разбираются кто какую часть обрабатывает.
Или нет?
GTSladeЭто похоже как раз то что хотел ТС. в памяти будет один массив и разные процессы будут менять именно его.
и изменять один двумерный массив?
Отредактировано doza_and (Май 27, 2014 22:03:02)
Офлайн
doza_and
Поэтому можно показать им все данные а там пусть сами разбираются кто какую часть обрабатывает.
Офлайн
BudulianinЧто shared mem быстрее проверялось неоднократно. Queue обеспечивает синхронизацию. С разделяемой памятью вы сами должны следить чтобы один процесс не испортил результаты другого процесса.
Может Queue быстрее будет?
Офлайн