Делитесь переменными между дочерними процессами в perl без IPC::Shareable

Мне нужно разделить переменные между различными дочерними процессами и моим родительским процессом в Perl без использования IPC: :Доступно.

В основном мне просто нужно иметь глобальную переменную, которую все процессы смогут читать/записывать. Кроме того, переменная нуждается только в доступе для записи от родителя, если это упростит мой ответ. Детям нужно только прочитать.

Изменить: моя проблема также может быть решена, если у меня есть способ передать сообщение от одного дочернего процесса к другому.


person Matt    schedule 02.02.2011    source источник


Ответы (2)


Из предоставленной вами информации трудно сказать, какое решение является лучшим, но вам доступно несколько вариантов:

  • передавать сообщение между вашими процессами, используя сокеты или каналы
  • использовать базу данных, в которой оба процесса читают и пишут
  • используйте файл (файлы), которые оба процесса читают и записывают (вы можете использовать сигналы, чтобы сообщить процессу, когда пришло время читать из файла)
  • настроить сервер memcache для обмена информацией

...Однако, поскольку ваша настоящая проблема на самом деле может заключаться в том, "как я могу сделать что-то на Perl, для чего требуется модуль, не установленный в моей системе, и у меня нет корневого контроля над этим box и сисадмины не могут или не хотят сотрудничать?». лучший ответ: "используйте local::lib", но вы можете прочитать больше вариантов в сообщении блога Мэтта Траута "Но Я не могу использовать CPAN!". (Клянусь, я публикую эту ссылку каждую неделю.)

person Ether    schedule 02.02.2011
comment
Вероятно, в долгосрочной перспективе лучше ссылаться на stackoverflow.com/questions/251705/ вместо этого, потому что сообщество может легче улучшить его, чем статья mst. - person daxim; 03.02.2011

Пробовали ли вы использовать threads::shared?

person Community    schedule 02.02.2011
comment
Я заметил какое-то странное поведение с многопоточностью Perl, поэтому вместо этого я переключился на использование форков. Мне интересно, есть ли способ сделать это без потоков, и, к сожалению, у меня нет доступа к IPC::Shareable =/ - person Matt; 03.02.2011
comment
Почему у вас нет доступа к IPC::Shareable? Все в порядке здесь и здесь. - person mob; 03.02.2011
comment
Компьютеры, с которыми я работаю, находятся в закрытой сети и не поставляются с этим пакетом по умолчанию. Я, вероятно, мог бы установить его на все свои машины, если бы приложил достаточно усилий, но я надеялся, что есть другой способ сделать это. - person Matt; 03.02.2011
comment
Я хочу сказать, что вам не нужно его устанавливать. Вы можете просто скопировать и вставить его в свой скрипт. - person mob; 03.02.2011