В настоящее время я создаю проект, который должен запускать подпроцесс в фоновом режиме для вывода последовательных данных с постоянной скоростью, а также время от времени связываться с основным процессом и наоборот.Проблема, с которой я столкнулся, состоит в том, что существует файл, который я использую для передачи этих данных, и я просто опрашиваю его каждые 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
Есть ли способ гарантировать, что в файле настроек всегда будут данные, или лучший способ заблокировать файл?Я также чувствую, что есть лучший способ сделать это, но я не могу думать об этом, поэтому, если кто-то знает о лучшем решении, пожалуйста, дайте мне знать