У меня есть компьютер под управлением Windows XP, который я использую для обработки большого количества данных, мониторов обновлений и банковских данных.Вообще это довольно загружено работой.
Один конкретный файл, содержащий данные в реальном времени, полезен для ряда пользователей.У нас есть две программы, которым нужен этот файл: одна отображает числовые данные, а другая - отображает числовые данные.Любой пользователь может запустить экземпляр любой программы на своем компьютере.Эти программы ищут файл данных в реальном времени, который обновляется каждую секунду.Они оба написаны на Perl, и меня попросили не менять ни одну из программ.
Из-за большой нагрузки на компьютер я в настоящее время запускаю программу, которая выполняет вычисления и создает файл данных в реальном времени в отдельном файле.компьютер.Эта программа просто записывает файл в реальном времени на перегруженный компьютер.Поскольку в Windows нет атомарной записи, я создал метод, который записывает в другое расширение, удаляет старый файл реального времени, а затем перемещает новый в правильное имя.К сожалению, поскольку пользовательская нагрузка на компьютер увеличивается, запись занимает больше времени (что не идеально, но возможно в режиме реального времени), но, что более раздражает, время между удалением старого файла реального времени и перемещением нового файла с правильным именем увеличиваетсяочень много, вызывая ошибки с программами Perl.Обе программы проверяют, изменилось ли время изменения файла (ни одна из них не проверяет блокировки файлов).Если файл пропадает, они сердятся и выдают сообщения об ошибках.
Я полагаю, что первым шагом было бы отодвинуть весь этот процесс от перегруженного компьютера.Моя другая мысль состояла в том, чтобы создать несколько копий файлов на разных машинах и заставить разных пользователей читать файл из разных мест (хотя это был бы настоящий взлом).
Я новичок в мире сетей и обмена файлами, но я знаю, что есть лучший способ сделать это.Честно говоря, весь этот метод немного взломан, но именно так и было, когда я пришел сюда.
Наконец, стоит упомянуть, что этот же процесс выполняется на машине UNIX и не имеет ни одной из этих проблем.По этой причине я чувствую, что вина падает на потребность в атомарной записи.Я искал в интернете любой способ обойти эту проблему и попробовал несколько различных методов (например, мой текущий метод переключения расширений).
Может кто-нибудь указать мне правильное направление, чтобы я мог решить эту проблему?
Мой код написан на Python.