Взаимодействие двух программ

209
14 ноября 2018, 04:10

Есть змейка, написанная на языке Processing (по факту, это огромная библиотека для Java). Есть алгоритм, который будет играть в змейку, но написанный на Python.

Мне нужно, чтобы программа со змейкой отправляла некоторые данные, а алгоритм их получал, обрабатывал, и отправлял ответ: «что делать дальше»

Как я делал раньше: Есть файл: communication.txt, в который поочередно пишут обе программы, каждая программа закачивает свою запись специальным символом

Как я делаю это сейчас: Есть 2 файла: snake.txt и ai.txt. Змейка записывает информацию в файл snake.txt затем алгоритм ее оттуда достаёт, анализирует, и отправляет ответ в ai.txt. Каждая запись заканчивается числом: системное время в миллисекундах (это нужно, чтобы проверять, ответил ли уже собеседник)

В первом случае, в файл в какой-то момент записывали обе программы, что ломало все взаимодействие.

Во втором изредка возникают редкие баги, которую я не могу понять.

Вопрос:

Правильно ли вообще использовать текстовые файлы для взаимодействия между программами?

Answer 1

То что вы реализуете называется Inter-process communication (IPC)

Файл - один из способов такого взаимодействия, но есть и другие (сокеты, каналы и т.д.) по ссылке выше есть список.

Что касается конкретно вашей проблемы с файлом:

В первом случае, в файл в какой-то момент записывали обе программы, что ломало все взаимодействие.

Это называется состоянием гонки. Чтобы решить эту проблему нужно синхронизировать доступ к ресурсу, которым пользуются два или более процесса. В то время как одна программа открыла файл для записи, другая должна ждать пока первая не закончит запись, и наоборот.

В java nio есть класс FileLock который позволяет заблокировать доступ к файлу, он работает на уровне операционной системы, так что пока файл заблокирован вашим Java процессом другие программы не смогут его использовать. Наверняка в Python есть что то подобное.

READ ALSO
Дополнительные (бесполезные) ROLLBACK'и при использовании BasicDataSource из commons-dbcp

Дополнительные (бесполезные) ROLLBACK'и при использовании BasicDataSource из commons-dbcp

Если экземпляр BasicDataSource из Apache commons-dbcp (версии 14, т

159
vue.js Поиск по элементам

vue.js Поиск по элементам

Всем привет,не получается реализовать поиск по элементам,данные получаю из api,подскажите как его можно сделатьВот код элемента,по которому...

145