今天出现一个问题:系统配置文件无法同步。
可以写入键值,但是键值表数据不变。
问题描述;
我写了一个主程序,然后几个子进程。
然后想用子进程修改某个键值。
显示已经修改成功,但是系统主键值不同步。
我觉得:系统在子进程调用参数的时候,如果有其他进程调用该文件,给其他进程一个键值的副本。当子进程修改键值的时候,不会在主进程进行同步。
当文件不执行的时候,会销毁副本。
所以键值就无法自动更新。
写个伪代码:
`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