|
Модераторы: ginnie, korob2001 |
|
DProf |
|
||||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.9.2012 Репутация: нет Всего: 1 |
Возможно ли в PERLе такое межпроцессорное взаимодействие: возвращение объекта из дочернего процесса? Задача такая - параллельно крутятся процессы (полученные fork-ом) и каждый инициализирует и заполняет данными объект(по объекту на процесс), который должен потом вернуться в родительский процесс для дальнейшей работы в родителе с объектами от детей. Совместное использование переменных в разных процессах очень простое - IPC::Shareable например. А вот сложные структуры так отработать не получается. Для демонстрации, например, надо вернуть объект Imager->new(), но вот тогда IPC::Shareable уже не работает:
Причем возвращать нужно именно объект, а не сами данные - просто передать их через pipe и потом заново в родителе инициализировать объект по этим данным можно, но это очень неэффективно по времени - не годится. Как быть с совместным использованием объектов? В-принципе объекты для каждого процесса может инициализировать родитель и передавать детям ссылку, а в дочерних процессах эти объекты заполняются, но ведь даже так не работает:
Perldoc и Camelbook не помогли... Я не очень хорошо разбираюсь в особенностях межпроцессорного взаимодействия - подскажите, возможно ли вообще то, что я хочу? Спасибо, жду ответ. Это сообщение отредактировал(а) DProf - 2.11.2012, 15:57 |
||||
|
|||||
Pfailed |
|
|||
Опытный Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
||||
|
||||
DurRandir |
|
|||
Опытный Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: нет Всего: 17 |
Если коротко, то состояние объекта Imager - это не только перловые данные, но и состояние С-шной библиотеки. Его вы передать не сможете. Меняйте архитектуру - передавать между процессами объекты это странное желание, процессы для того и делаются, чтобы изолированно выполнить задачу от начала и до конца.
|
|||
|
||||
DProf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.9.2012 Репутация: нет Всего: 1 |
Спасибо за оперативный ответ.
DurRandir, согласен с Вами, сейчас так все и работает, процесс выполняет свою задачу, возвращает данные (картинку) через pipe и умирает. Беда лишь в том, что сначала в дочернем идет вызов Write (не самый быстрый), потом в родителе данные читаются (снова потеря времени) и снова инициализируется тот же объект, с которым идет дальнейшая работа (объекты от нескольких процессов соединяются и тд). Вот и хотелось не терять время сначала на печать картинки, а потом на инициализацию объекта по этой же картинке. Так что желание не совсем странное ) Это сообщение отредактировал(а) DProf - 6.11.2012, 12:30 |
|||
|
||||
DProf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.9.2012 Репутация: нет Всего: 1 |
Кстати как вариант можно было использовать потоки (threads). Но там тоже проблемы есть.
|
|||
|
||||
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |