|
使用内存映射文件(适用于Windows)
这种方法通过Windows API来实现,允许两个应用程序共享内存中的数据块。这种方法在性能上非常高效,但需要Windows平台支持,并且需要处理同步问题以避免竞争条件。在Delphi中可以使用TMemoryMappedFile类来实现。在Python中,可以使用mmap模块或者memory_fs库(如pywin32)。然而,对于跨平台的需求,这种方法可能不是最佳选择。对于跨平台需求,通常推荐使用数据库或网络通信方法。
选择哪种方法取决于你的具体需求,如数据量大小、实时性要求、是否需要跨平台以及系统的复杂性等因素。通常,对于大多数项目,使用数据库或文件共享就
- import mmap
- import contextlib
- ####################################
- # to clear share data file with \x00
- ####################################
- def cleanShareFile(fName):
- with open(fName, "wb") as f:
- fill = '\x00' * 1024
- fill = fill.encode(encoding='utf-8') # turns str to bytes and write to file.
- f.write(fill) # turns str to bytes and write to file.
- f.close()
- ####################################
- # write money data to data file
- ####################################
- def writeDataToShareFile(fName, money_dictionary):
- with open(fName,'r+b') as f:
- with contextlib.closing(mmap.mmap(f.fileno(), 1024, access=mmap.ACCESS_WRITE)) as m:
- try:
- m.seek(0)
- outp_string = 'Pufa:' + str(money_dictionary['pufa']) + \
- '|Lingqian:' + str(money_dictionary['lingqian']) + \
- '|Qita:' + str(money_dictionary['qita'])
- outp_string.rjust(1024, '\x00') # 右对齐outp_string为\x00
- outp_bytes = outp_string.encode(encoding='utf-8') # 将str类型转变为bytes类型
- m.write(outp_bytes)
- m.flush()
- print(u"写入成功!")
- except Exception as err:
- print('!'*10 + repr(err)) # 获取完整的err信息。
- # m.close()
- f.close()
- ####################################
- # main flow 输入数字并存储于共享数据文件
- ####################################
- print(u"请输入数字:")
- lingqian = input(u"微信零钱:")
- pufa = input(u"浦发:")
- qita = input(u"其他零钱:")
- money_diction={'lingqian':lingqian, 'pufa':pufa, 'qita':qita}
- fName = ".\money.dat"
- cleanShareFile(fName)
- writeDataToShareFile(fName, money_diction)
复制代码- import mmap
- import contextlib
- ####################################
- # Get content of share file as string
- ####################################
- def getShareFileContent():
- fName = "./money.dat"
- text = None
- with open(fName,'r') as f:
- with contextlib.closing(mmap.mmap(f.fileno(), 1024, access=mmap.ACCESS_READ)) as m:
- text = m.read(1024)
- text = str(text, encoding='utf-8').replace('\x00', '')
- m.close()
- f.close()
- return text
- ####################################
- # return:{Pufa:100, Lingqian:100, Qita:100}
- ####################################
- def getMoney():
- dic = {}
- text = getShareFileContent()
- ls = text.split("|")
- for item in ls:
- key, value = item.split(":")
- dic[key] = value
- return dic
复制代码
|
|