Задать вопрос

Взаимодействие нескольких python скриптов?

Суть: есть основой скрипт, который формирует файл с базой (json) и несколько вспомогательных, которые раз в N секунд проверяют, не изменился ли файл и считывают его при необходимости.
Это работает, но архитектурно так себе. К тому же при попадании считывания файла во время его записи вспомогательные скрипты ловят исключение (невалидный json). Оно обрабатывается, конечно же, и через N секунд файл снова будет считан.
Какие есть варианты межпроцессного взаимодействия (речь именно о python)?
Следует учесть, что скрипты запускаются и на windows, и на linux, так что платформоспецифичные варианты не подходят.
Устанавливать mongo/mysql - крайний вариант.
Специфичность файла - каждая новая версия полностью заменяет предыдущие данные.
  • Вопрос задан
  • 722 просмотра
Подписаться 4 Средний Комментировать
Решения вопроса 1
landergate
@landergate
IT-шный jack-of-all-trades
Опрашивать файл не надо, достаточно использовать inotify от самой ОС.
Под Python есть кросс-платформенные реализации отслеживания изменения файлов через inotify-like подсистемы. Отслеживающие скрипты будут ловить событие по итогам записи и закрытия файла, даже без коммуникации с основным процессом.

А так, скрипты могут взаимодействовать друг с другом как по HTTP (публикуя от себя маленький веб-сервер), так и по любому самописному RPC-протоколу поверх TCP или unix socket'ов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Как самое простое решение можно положить json в sqlite, это не требует отдельного приложения, достаточно одного модуля.

Ещё можно использовать flock на файл (но это кажется работает не на всех системах) или создавать flag-файл после создания json, по наличию которого приложения будут реагировать на изменения (как вариант, можно реагировать на изменение таймстампа flag-файла).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽