configopj无法同步的原因和解决

今天出现一个问题:系统配置文件无法同步。
可以写入键值,但是键值表数据不变。

问题描述;
我写了一个主程序,然后几个子进程。
然后想用子进程修改某个键值。
显示已经修改成功,但是系统主键值不同步。

我觉得:系统在子进程调用参数的时候,如果有其他进程调用该文件,给其他进程一个键值的副本。当子进程修改键值的时候,不会在主进程进行同步。
当文件不执行的时候,会销毁副本。
所以键值就无法自动更新。

写个伪代码:

`if 文件未打开:
        提供源文件
#修改内容
if  文件已被占用
      提供只读副本
#进程结束
      删除只读副本

你修改的键值保存在只读副本里面,然后销毁了。
花了3个小时……

程序体示意:
假如有个键值try_1

import configobj
import threading
config = configobj.ConfigObj('F:\\d1\\passwd.ini')
def get1111():
        config['mail']['try_1'] = 1
        print(config['mail']['try_1'])


t3 = threading.Thread(target=get1111)
t3.setDaemon(True)
t3.start()

开一个程序,然后然后可以有回显1
在这里插入图片描述

开双进程,其中一个占用了ini。

import configobj
import threading
config = configobj.ConfigObj('F:\\d1\\passwd.ini')
def loop1():
    # 这个进程占着键值啥都不做
    config['mail']['try_1']


def get1111():
        config['mail']['try_1'] = 1
        print("系统键值为")
        print(config['mail']['try_1'])

t4 = threading.Thread(target=loop1)
t4.setDaemon(True)
t4.start()
t3 = threading.Thread(target=get1111)
t3.setDaemon(True)
t3.start()

pass

上图有一个进程占了ini
执行该程序
在这里插入图片描述

然后可以有回显1,说明键值已经修改,子进程键值正常
但是系统键值仍然为0
子进程使用该键值是已经修改的键值,而主进程用的是没修改的键值。

似乎有这么一个逻辑:
每个文件一个键值表,只有一个程序能够修改键值,其他的只能获取只读副本。
当程序调用系统的第一个进程能够修改,第二个不行……
到底逻辑如何,有一个教程
http://www.voidspace.org.uk/python/configobj.html
但是我是一个小IJ,我不想看英文……翻译质量又差……
等着有时间再说……

处理这个问题:把键值当做不能修改的文件,手工修改键值。
如果需要变量,就拿出自己的老本行:
键值写个文件路径,写文件里。

2333

猜你喜欢

转载自blog.csdn.net/weixin_45642669/article/details/113976389