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

Суть: есть основой скрипт, который формирует файл с базой (json) и несколько вспомогательных, которые раз в N секунд проверяют, не изменился ли файл и считывают его при необходимости.
Это работает, но архитектурно так себе. К тому же при попадании считывания файла во время его записи вспомогательные скрипты ловят исключение (невалидный json). Оно обрабатывается, конечно же, и через N секунд файл снова будет считан.
Какие есть варианты межпроцессного взаимодействия (речь именно о python)?
Следует учесть, что скрипты запускаются и на windows, и на linux, так что платформоспецифичные варианты не подходят.
Устанавливать mongo/mysql - крайний вариант.
Специфичность файла - каждая новая версия полностью заменяет предыдущие данные.
  • Вопрос задан
  • 720 просмотров
Решения вопроса 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-файла).
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 12:53
25000 руб./за проект
22 нояб. 2024, в 12:20
10000 руб./за проект
22 нояб. 2024, в 11:53
3000 руб./за проект