并发读/写到文件

时间:2019-03-01 18:03:24

标签: python subprocess fcntl

我当前正在创建一个项目,该项目需要在后台运行子流程以恒定速率输出串行数据,并且有时还需要与主流程进行通信,反之亦然。我遇到的问题是,我正在使用一个文件来传达这些数据,我只是每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

是否有任何方法可以确保设置文件中始终有数据,或者是一种更好的锁定文件的方法?我也觉得有更好的方法可以做到这一点,但我想不到,所以如果有人知道更好的解决方案,请告诉我

0 个答案:

没有答案