Как разделить состояние между программами?

У меня есть 2 программы, которые должны общаться друг с другом. Они должны делиться состоянием (переменные, файлы - я не знаю, как этого добиться). Одна программа должна прочитать его и отреагировать на изменения, а другая должна записать это глобальное состояние.

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

Каков наилучший способ достижения этого общего состояния между программами? (ищу кроссплатформенное решение)

2 ответа

Обычный способ поддерживать синхронизацию двух процессов в состоянии - использовать IPC (InterProcess Communication). Но IPC здесь может не работать, если под "кроссплатформенностью" вы подразумеваете, например, синхронизацию приложения Python в Linux с родным приложением Windows в Windows. В этом случае вы в значительной степени застряли с REST, использующим HTTP для обслуживания Json, XML и т. Д.

Запись состояния в доступный по сети временный файл создаст все виды проблем. Лучше иметь один процесс, выступающий в роли "сервера", обслуживающий состояние "клиентских" процессов. Когда клиент хочет обновить свое состояние, он запрашивает самое последнее состояние с сервера в это время. Сервер отвечает Json или эквивалентным объектом, который содержит последнее состояние. Сделка является дискретной. Нет возможности попробовать прочитать файл, пока другой процесс пишет его, или прочитать файл, который устарел.

Одна из идей для этого - экспортировать ваши данные (переменные, состояние и т. Д.) В файл json и сохранить их во временном файле. После того, как вы это сделали, со своей второй программой вы можете прочитать этот json-файл, который был сгенерирован первой программой, и проанализировать его, чтобы вы могли присвоить эти переменные второй программе.

Если вы работаете с этими программами в сети, я бы предложил использовать REST.

XML и Json - это форматы для обмена информацией между платформами. Вы должны убедиться, что у вас есть Json-анализатор в обеих программах.

Надеюсь, это поможет.

Другие вопросы по тегам