Найти - Пользователи
Полная версия: Процессы и двумерный массив
Начало » Центр помощи » Процессы и двумерный массив
1 2
GTSlade
Подскажите, есть ли способ заставить процессы параллельно работать и изменять один двумерный массив? Т.е. первый процесс работает с первой четвертью строк, второй со второй четвертью и т.д.
Как это компоновать с помощью Queue из multiprocessing я не представляю.
JOHN_16
GTSlade
моя мысль: если действия процессов не затрагивают общие элементы списка т.е. не перекрываются, то ничего не надо делать, т.к. процессы не имеют общих ресурсов.
Более опытные в параллелизме товарищи поправят, если я не прав.
GTSlade
JOHN_16
В том то и дело, что пограничные строки используются всеми процессами.
На данный момент вопрос: как вообще поместить двумерный массив в очередь?
Shaman
http://habrahabr.ru/post/167503/ Посмотрите, может быть поможет.
Budulianin
GTSlade
Т.е. первый процесс работает с первой четвертью строк, второй со второй четвертью и т.д.
Судя по этому предложению, у каждого процесса определённые элементы списка.
GTSlade
В том то и дело, что пограничные строки используются всеми процессами.
А тут ты говоришь, что есть элементы, с которыми должны работать несколько процессов.

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

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

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

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

Зачем вообще тогда Queue, если можно использовать shared memory?
Может Queue быстрее будет? Например, пока один процесс подключен к shared memory и делает вычисления, чтобы изменить что-то, другие процессы ждут. А из Queue процессы берут объекты и работают с ними параллельно.
doza_and
Budulianin
Может Queue быстрее будет?
Что shared mem быстрее проверялось неоднократно. Queue обеспечивает синхронизацию. С разделяемой памятью вы сами должны следить чтобы один процесс не испортил результаты другого процесса.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB