Использование переменных среды для простого межпроцессного взаимодействия

Каковы последствия / предостережения, которых мне нужно было бы остерегаться, если бы я использовал переменные среды Linux в качестве простого способа обмена информацией между различными процессами (написанными на Python)? Например, являются ли чтение и запись атомарными в однопроцессорной / ядерной системе?

Я разрабатываю встроенную систему на Raspberry Pi, в которой у меня будет несколько независимых процессов, выполняющих мониторинг и управление. Этим процессам иногда требуется доступ к общему «свойству», которое будет обновляться другим процессом. Например, один процесс может отслеживать считыватель RFID и обновлять переменную среды, добавляя серийный номер последней считанной карты. Тогда другие процессы смогут получить доступ к этому серийному номеру и использовать его.

Единственная причина, по которой я рассматриваю эту идею, - простота. Меня интересует только обмен простыми строками и числами между процессами, и я считаю, что это проще, чем использовать что-то вроде сокетов.


person Amr Bekhit    schedule 22.04.2014    source источник
comment
Переменные среды абсолютно не подходят для работы. Они устанавливаются перед запуском процесса, могут быть изменены только этим процессом, а изменения могут наблюдаться только дочерними процессами, запущенными этим процессом. Никаких реальных способностей к общению, кроме одного направления ...   -  person twalberg    schedule 22.04.2014
comment
Не делай этого, даже если бы мог. Нет нормального способа сделать это, и то, что вы можете сделать, - это ужасные уловки, которые приведут только к душевной боли. Вместо этого задайте вопрос, подробно описывающий, как процессы должны обмениваться информацией, и люди могут помочь вам сузить круг вариантов до соответствующего IPC.   -  person Duck    schedule 22.04.2014
comment
Спасибо, немного поэкспериментировав, я пришел к такому же выводу - вы не можете использовать их так, как я ожидал.   -  person Amr Bekhit    schedule 23.04.2014


Ответы (1)


Я также работаю над встроенной системой на RPI, с аналогичными требованиями для определенных случаев. По моему опыту, лучший подход - использовать именованные каналы Linux (FIFO).

Вот некоторые ресурсы, но в Интернете, конечно же, есть много других:

http://www.linuxjournal.com/article/2156
http://www.roman10.net/named-pipe-in-linux-with-a-python-example/
http://tuxthink.blogspot.com/2012/02/inter-process-communication-using-named.html

person bosnjak    schedule 22.04.2014