Найти - Пользователи
Полная версия: Как реализовать поочерёдный доступ к файлу разными экземплярами процесса?
Начало » Центр помощи » Как реализовать поочерёдный доступ к файлу разными экземплярами процесса?
1
Master_Sergius
Здравствуйте. Имеется скрипт, который берет из текстового файла некий параметр, изменяет его затем и делает свою работу. Запусков скрипта может быть много, соответсвенно, надо чтобы они гарантированно не смогли попадать или испортить файл. То есть, чтобы следующий экземпляр ждал, пока файл освободится, а тогда с ним работал. Как это можно сделать?
Я покопал немного, и вроде это должно решаться через файловые дескрипторы, но вот ещё не могу понять как.
doza_and
Master_Sergius
берет из текстового файла некий параметр, изменяет его затем и делает свою работу
Так он его кладет обратно в файл?.
Судя по всему да.

На мой вкус это неправильная архитектора приложения. Опишите подробнее задачу. тогда можно будет сказать определеннее.
Дескрипторы все равно надо передавать между приложениями, поэтому в любом случае interprocess communication :( и игра с дескрипторами теряет всякий смысл.

p.s.
Много раз видел приложения такого вида. И всегда были проблемы. Авторы не могли добиться устойчивой работы постоянно или дедлоки или ошибки записи данных. Не работали системы контроля версий. Очень трудно было модифицировать алгоритмы и т.п.
py.user.next
Master_Sergius
Как это можно сделать?
Можно снаружи временный файл создать, существование которого будет проверяться. Это так процессы в лине делают, когда создают .pid файлы.
doza_and
py.user.next
Можно снаружи временный файл создать
Думаю лучше велосипеды не изобретать:
https://pypi.python.org/pypi/lockfile
Но в любом случае это уже пошли разные методы interprocess communication.
Master_Sergius
Ну вот, смотрите, что Я пытаюсь сделать:
имею свою утилитку, которая выдает меседж в окошке (через Tkinter), подобно уведомлениям всяким (очень похоже на notify-osd в убунте)

Естественно, если один меседж уже появился, и в это время другой должен появиться, то тот другой должен быть смещен. Например, первое появляется на справа сверху, на расстоянии 100 пикселей, то второй, должен опуститься ещё на высоту первого меседжа + некое расстояние между ними. Потом так же третий меседж если что и так далее. Итого, получается, мне надо хранить где-то текущий отступ.

Или же, у вас есть другие предложения?

п.с. посмотрел описание той оригинальной утилиты notify-osd, там управляющий демон решает все проблемы
doza_and
Master_Sergius
Или же, у вас есть другие предложения?

1. Ну например одно сообщение один файл. Имя например определяется временем создания. При создании нового сообщения смотрите все файлы и размещаете новое сообщение сообразно.
2. Если не нужно долговременное сохранение состояний - храните данные в запущенном демоне как вы уже посмотрели.
3. Классика это использование СУБД.
JOHN_16
Master_Sergius
я прям вижу здесь sqlite и, как следствие, отсутствие проблем.
4kpt_II
JOHN_16
Аналогичное решение посоветовал Master_Sergius в личной переписке по скайпу…
Master_Sergius
Всем большое спасибо, уже работаю над интеграцией с SQLite
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB