|
6 / 6 / 1
Регистрация: 26.09.2017
Сообщений: 68
|
|||||||||||
Multiprocessing array с экземпляром класса06.10.2017, 10:13. Показов 3497. Ответов 6
Метки нет (Все метки)
добрый день. Решил протестировать как будет вести себя программа в мульти поточных вычислениях. Начал разбираться нашёл модуль multiprocessing он устраивает своей простотой но к моей задаче Я не нашёл как прикрутить.
Вырезки из кода
arr1 = Array(array[:l/2]) TypeError: slice indices must be integers or None or have an __index__ method либо arr = Array(array) TypeError: Array() missing 1 required positional argument: 'size_or_initializer' На данный момент целостность списка важна.
0
|
|||||||||||
| 06.10.2017, 10:13 | |
|
Ответы с готовыми решениями:
6
Работа с экземпляром класса Проблема с экземпляром класса Что является экземпляром класса? |
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
|||||||||||
| 06.10.2017, 18:56 | |||||||||||
|
По первой ошибке
multiprocessing.Array - создает массив объектов ctypes. Это не то, что вам нужно. Список, разделяемый процессами, - это multiprocessing.Manager.list.multiprocessing подразумевает обязательное использование конструкции if __name__ == '__main__': (чтобы «маринатор» не уронил скрипт в бездну бесконечного порождения новых и новых процессов... Впрочем, иначе multiprocessing бросит исключение, и вежливо попеняет, мол, вы, возможно, зыбыли использовать сию идиому). На target=pointGo.tempGo будет ругаться «маринатор» (pickle), т.к. сериализовать такое не может (все аргументы target-функции тоже должны быть сериализуемыми).Схематичное итого
Гляньте multiprocessing.Pool и/или concurrent.futures.ProcessPoolExecutor (последний и попроще, и пошустрее). Вероятно они вам подойдут...
0
|
|||||||||||
|
6 / 6 / 1
Регистрация: 26.09.2017
Сообщений: 68
|
||||||||||||||||
| 17.11.2017, 15:13 [ТС] | ||||||||||||||||
|
Пришлось отойти от проблемы покурить мануалы и столкнулся с проблемами.
Задача прежняя посчитать большой объём точек. Точки взаимодействуют друг с другом. Если условно разделить массив на 2-е части то будет вхождение вычисляемых точек как с одной стороны так и с другой. По этому мне очень хочется чтобы у всех процессов была общая память.
0
|
||||||||||||||||
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
||||||
| 17.11.2017, 18:11 | ||||||
|
Функция test_1 выглядеть должна так примерно
arr = manager.list внутри него создается list. Непосредтвенного доступа к этому списку, разумеется, нет. Поэтому действие arr[1] = value приведёт к тому, что копия value будет отправлена по трубе manager'у, где и будет запихана в нужный список по требуемому индексу. И обратно, манипуляции с arr[1] - это действия над копией, содержащегося там объекта. Если объект - изменяемый (класс Point в нашем случае), arr[1].chengeTemp(1) приведёт к изменению его копии в текущем рабочем процессе, и никак не отразится на оригинале в «разделяемой памяти».
1
|
||||||
|
6 / 6 / 1
Регистрация: 26.09.2017
Сообщений: 68
|
|
| 17.11.2017, 19:55 [ТС] | |
|
shsv, спасибо большое за объяснение буду экспериментировать.
0
|
|
|
6 / 6 / 1
Регистрация: 26.09.2017
Сообщений: 68
|
|
| 21.11.2017, 09:30 [ТС] | |
|
shsv, Ваш пример помог но есть небольшая сложность. В одном цикле к списку который передаю обращений штук 60. Цикл выполняется примерно за пол секунды а то и быстрее. Получается что создавая 2-а процесса у меня работают 3-и процесса загружая 2-х ядерник под завязку. на 4-х ядерном в 5 процессов загрузка от 60% до 80% Предположил что слишком частое обращение к списку что до предела грузит канал связи процессов.
Решил уменьшить нагрузку на запросах на изменение всего 2-а в цикле можно и пожертвовать Попробовал создать копию до создания процессов(arr2 = arr) и каждому передать не помогло. Так же попробовал создать после создания процесса. И пробовал создать копию с помощью модуля copy (arr2 = copy.copy(arr)) Может вы знаете метод как уменьшить нагрузку на канал связи?
0
|
|
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
||||||
| 21.11.2017, 18:43 | ||||||
|
Что-то вроде
И всё же гляньте concurrent.futures.ProcessPoolExecutor...
0
|
||||||
| 21.11.2017, 18:43 | |
|
Помогаю со студенческими работами здесь
7
Разница между объектом и экземпляром класса Узнать экземпляром какого класса является перемещаемая форма?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|