Автор Тема: Распараллеливание функций  (Прочитано 4047 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mef-t [?]

  • Осваивающий
  • **
  • Сообщений: 303
  • Репутация: 30
    • Награды
Распараллеливание функций
« Создано: Август 24, 2017, 15:00:26 »
AutoIt: 3.3.14
Версия: 1.0.2

Категория: Автоматизация, Вспомогательные функции, Разное

Описание: Данная UDF помогает запустить несколько копий функций параллельно.
На текущий момент функции не могут возвращать результатов в основной скрипт.
На текущий момент в функцию нельзя передать аргументы


Т.к. autoit не поддерживает многопоточность, то данное решение просто создает несколько процессов.
Присутствуют 2 функции:
__paralelFunc_Init() - стартовая точка, после которой повторно запущенный процесс перейдет к запуску функции.
В зависимости от того, требуется ли включить библиотеки, переменные, или выполнение другого кода функция размещается или в самому начале скрипта, или несколько позже.
__paralelFunc($function, $count) - функция инициирует запуск дополнительных процессов.

Код/Пример:
(нажмите для показа/скрытия)

Файл: _paralelFunc.au3

История версий:
(нажмите для показа/скрытия)

Источник: autoit-script.ru
Автор(ы): mef-t

Дополнительно: О том, как передать аргументы, мысли есть. Чуть позже будет.
Сложнее получить результат. Просьба подсказать варианты передачи данных между процессами.

UPD:
На текущий момент добавил вывод через консоль, используя $STDOUT_CHILD.
Данные возвращаются через массив. В используемой функции возвращаемые данные нужно отправлять в консоль.
« Последнее редактирование: Август 24, 2017, 16:28:33 от mef-t »

Русское сообщество AutoIt

Распараллеливание функций
« Отправлен: Август 24, 2017, 15:00:26 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2586
  • Репутация: 443
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Распараллеливание функций
« Ответ #1, Отправлен: Август 24, 2017, 18:57:22 »
mef-t  [?]
Цитировать
передачи данных между процессами.
прямо в поиск забиваешь  и сразу куча результатов
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн mef-t [?]

  • Осваивающий
  • **
  • Сообщений: 303

  • Автор темы
  • Репутация: 30
    • Награды
Re: Распараллеливание функций
« Ответ #2, Отправлен: Август 24, 2017, 21:34:32 »
не много конечно, но в целом есть, можно пользоваться. Посмотрю.
На текущий момент больше думаю, как аргументы передать.
один из вариантов - использовать массив (одномерный или двумерный) аргументов.

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2586
  • Репутация: 443
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Распараллеливание функций
« Ответ #3, Отправлен: Август 24, 2017, 22:02:55 »
передавай строки аргументов, а принимающий процесс сам переведет в массив или что там нужно
пользуюсь
Код: AutoIt [Выделить]
передает строки через общую структуру файла
более двух лет пользуюсь, косяков не было

Русское сообщество AutoIt

Re: Распараллеливание функций
« Ответ #3 Отправлен: Август 24, 2017, 22:02:55 »

Оффлайн mef-t [?]

  • Осваивающий
  • **
  • Сообщений: 303

  • Автор темы
  • Репутация: 30
    • Награды
Re: Распараллеливание функций
« Ответ #4, Отправлен: Август 25, 2017, 10:18:24 »
Да, вариант хороший, но только при обмене данными между 2мя процессами.
Когда родитель должен получить данные с множества дочерних процессов, возникают трудности.
Т.к. процессы работают одновременно, то и обмен данными тоже должен идти одновременно. А так как родитель всего один, то обмен данными будет идти последовательно. В этой ситуации один из процессов уже может закрыться.
Можно, конечно, заставить процессы ждать, но тогда какой смысл в параллельном запуске.
Тут результат правильнее записывать в некий поток, от куда потом его считывать.
Консоль - это полурешение, т.к. в консоль может быть направлены и другие тексты.

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2586
  • Репутация: 443
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Распараллеливание функций
« Ответ #5, Отправлен: Август 25, 2017, 10:45:05 »
Создаешь структуру, в которой есть ячейка для каждого процесса. Процессы копируют данные каждый в свою ячейку. Основной процесс читает. Подключенных процессов может быть более одного.


Добавлено: Август 25, 2017, 10:48:17
И вообще, на форуме уже были темы о псевдо многопоточности. Поищи

Оффлайн Prog [?]

  • Осваивающий
  • **
  • Сообщений: 290
  • Репутация: 29
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Распараллеливание функций
« Ответ #6, Отправлен: Август 25, 2017, 12:07:39 »
joiner  [?]
Цитировать
Процессы копируют данные каждый в свою ячейку. Основной процесс читает.
А если потребуется обмен между созданными процессами?
Нет, все это даже близко не сравнится с возможностями многопоточности.

Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3672
  • Репутация: 975
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Распараллеливание функций
« Ответ #7, Отправлен: Август 25, 2017, 13:09:19 »
mef-t
Цитировать
Тут результат правильнее записывать в некий поток, от куда потом его считывать.
MailSlot

Русское сообщество AutoIt

Re: Распараллеливание функций
« Ответ #7 Отправлен: Август 25, 2017, 13:09:19 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2586
  • Репутация: 443
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Распараллеливание функций
« Ответ #8, Отправлен: Август 25, 2017, 13:46:55 »
Цитировать
Нет, все это даже близко не сравнится с возможностями многопоточности.
Я как раз об этом и писал, упомянув псевдо многопо очность.

Русское сообщество AutoIt

Re: Распараллеливание функций
« Ответ #8 Отправлен: Август 25, 2017, 13:46:55 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
4470 Просмотров
Последний ответ Октябрь 09, 2009, 16:03:33
от Yashied
9 Ответов
3279 Просмотров
Последний ответ Сентябрь 03, 2013, 20:41:17
от Zaramot
0 Ответов
1014 Просмотров
Последний ответ Сентябрь 07, 2013, 20:18:06
от alex33
1 Ответов
1656 Просмотров
Последний ответ Октябрь 23, 2013, 23:15:35
от Viktor1703
0 Ответов
499 Просмотров
Последний ответ Март 24, 2014, 13:33:20
от madmasles
1 Ответов
890 Просмотров
Последний ответ Май 08, 2014, 12:40:52
от InnI
0 Ответов
1541 Просмотров
Последний ответ Май 19, 2014, 00:32:09
от Shinoby
2 Ответов
647 Просмотров
Последний ответ Апрель 14, 2015, 12:14:16
от pvnn
2 Ответов
998 Просмотров
Последний ответ Апрель 28, 2015, 16:19:50
от .me
1 Ответов
1081 Просмотров
Последний ответ Июнь 18, 2016, 21:52:37
от firex