我当前正在创建一个项目,该项目需要在后台运行子流程以恒定速率输出串行数据,并且有时还需要与主流程进行通信,反之亦然。我遇到的问题是,我正在使用一个文件来传达这些数据,我只是每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
是否有任何方法可以确保设置文件中始终有数据,或者是一种更好的锁定文件的方法?我也觉得有更好的方法可以做到这一点,但我想不到,所以如果有人知道更好的解决方案,请告诉我