Есть змейка, написанная на языке Processing (по факту, это огромная библиотека для Java). Есть алгоритм, который будет играть в змейку, но написанный на Python
.
Мне нужно, чтобы программа со змейкой отправляла некоторые данные, а алгоритм их получал, обрабатывал, и отправлял ответ: «что делать дальше»
Как я делал раньше:
Есть файл: communication.txt
, в который поочередно пишут обе программы, каждая программа закачивает свою запись специальным символом
Как я делаю это сейчас:
Есть 2 файла: snake.txt
и ai.txt
. Змейка записывает информацию в файл snake.txt
затем алгоритм ее оттуда достаёт, анализирует, и отправляет ответ в ai.txt
.
Каждая запись заканчивается числом: системное время в миллисекундах (это нужно, чтобы проверять, ответил ли уже собеседник)
В первом случае, в файл в какой-то момент записывали обе программы, что ломало все взаимодействие.
Во втором изредка возникают редкие баги, которую я не могу понять.
Вопрос:
Правильно ли вообще использовать текстовые файлы для взаимодействия между программами?
То что вы реализуете называется Inter-process communication (IPC)
Файл - один из способов такого взаимодействия, но есть и другие (сокеты, каналы и т.д.) по ссылке выше есть список.
Что касается конкретно вашей проблемы с файлом:
В первом случае, в файл в какой-то момент записывали обе программы, что ломало все взаимодействие.
Это называется состоянием гонки. Чтобы решить эту проблему нужно синхронизировать доступ к ресурсу, которым пользуются два или более процесса. В то время как одна программа открыла файл для записи, другая должна ждать пока первая не закончит запись, и наоборот.
В java nio есть класс FileLock который позволяет заблокировать доступ к файлу, он работает на уровне операционной системы, так что пока файл заблокирован вашим Java процессом другие программы не смогут его использовать. Наверняка в Python есть что то подобное.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Если экземпляр BasicDataSource из Apache commons-dbcp (версии 14, т
На данный вопрос уже ответили:
Всем привет,не получается реализовать поиск по элементам,данные получаю из api,подскажите как его можно сделатьВот код элемента,по которому...