Одновременное чтение / запись в файл - PullRequest
0 голосов
/ 01 марта 2019

В настоящее время я создаю проект, который должен запускать подпроцесс в фоновом режиме для вывода последовательных данных с постоянной скоростью, а также время от времени связываться с основным процессом и наоборот.Проблема, с которой я столкнулся, состоит в том, что существует файл, который я использую для передачи этих данных, и я просто опрашиваю его каждые 5 секунд на предмет любых изменений в подпроцессе, который работает, но время от времени загрузка json не дает результатов, говоряданных не былоТо, что я предполагаю, является неправильным, - то, что файл редактируется другим процессом, и нет никаких данных в файле в течение доли секунды.Я попытался реализовать fcntl для блокировки, но, похоже, это не помогает.

def write_settings(self, settings):
    x = open('settings.json', 'w')
    while True:
        try:
            fcntl.flock(x, fcntl.LOCK_EX | fcntl.LOCK_NB)
            json.dump(settings, x)
            fcntl.flock(x, fcntl.LOCK_UN)
            return
        except IOError as e:
            pass

 def get_settings(self):
    x = open('settings.json')
    while True:
        try:
            fcntl.flock(x, fcntl.LOCK_EX | fcntl.LOCK_NB)
            settings = json.load(x)
            fcntl.flock(x, fcntl.LOCK_UN)
            return settings
        except IOError as e:
            pass

Есть ли способ гарантировать, что в файле настроек всегда будут данные, или лучший способ заблокировать файл?Я также чувствую, что есть лучший способ сделать это, но я не могу думать об этом, поэтому, если кто-то знает о лучшем решении, пожалуйста, дайте мне знать

...