Для начала у меня есть два скрипта, скажем, scr1.py и scr2.py.Два сценария работают непрерывно, независимо (как два демона), за исключением того, что scr1.py должен знать из scr2.py, когда что-то происходит (например, scr2.py пишет 'событие').
То, что я пробовалполучить - scr2.py пишет (когда это необходимо) куда-то и scr1.py опрашивает, чтобы узнать, когда scr2.py написал.
То, как я думал, похоже на разветвление двух процессов в системе Linuxвызовов, но между двумя сценариями Python.
Я видел много ответов, и все они касаются модуля подпроцесса, второй процесс запускается с использованием Popen и stdout = PIPE, но последний возвращает данные в первый.только когда закончится второй (что не должно произойти, потому что scr2.py сделает что-то еще).В то же время некоторые другие касаются многопроцессорного модуля, который хорошо работал бы с использованием каналов или очередей, но я бы предпочел, чтобы второй процесс выполнялся в отдельном скрипте, а не в функции первого скрипта.Что-то вроде (в псевдокоде):
'' '
scr1.py
run(scr2.py)
while True:
#comm_resource should have a behavior similar to pipes, where when one end is read, the value is removed from it (set to None or to a default value)
if comm_resource!='':
#do something
#go on with something else
' '' '
scr2.py
while True:
if something_happened: #a general condition
write_to_comm_resource('something happened')
#keep doing other stuff
Надеюсь, вопрос достаточно ясен, к сожалению, я пока не нашел ничего, что бы полностью удовлетворяло этому требованию, поэтому я пока не писал никакого кода.Мой вопрос тогда касается связи между двумя параллельными сценариями, когда второй пишет и первый опрашивает это (сейчас не важно, если результат опроса ничего не значит, и сразу после этого происходит запись в этот ресурс,первый скрипт будет опрашивать его снова, и эта задержка будет приемлемой).Я бы предпочел избегать использования файлов, потому что число записей в энергонезависимой памяти ограничено.
Редактировать: я обнаружил, что могу использовать Popen для запуска процесса, poll (), чтобы проверить, запущен ли они stdout.readline () для чтения строки.Это работает как-то, но если у меня есть time.sleep (1) в подпроцессе, я не получаю вывод.