我坚持寻找以下多重处理问题的解决方案。
在record.py模块中有一个Record类。记录类的职责是处理输入数据并将其保存到JSON文件中。 Record类具有方法put()来更新JSON文件。
记录类在类装饰器中初始化。装饰器应用于各种子模块的大多数类。 装饰器提取其装饰的每个方法的信息,并将数据发送到Record类的put()方法。 Record类的put()方法然后更新JSON文件。
问题在于,当不同的进程运行时,每个进程都会创建自己的记录对象实例,并且Json数据会因为 多个进程尝试更新相同的json文件。 此外,每个进程可能都有正在运行的线程试图访问和更新相同的JSON文件。 请让我知道如何解决这个问题。
class Record():
def put(data):
# read json file
# update json file with new data
# close json file
def decorate_method(theMethod):
# Extract method details
data = extract_method_details(theMethod)
# Initialize record object
rec = Record()
rec.put(data)
class ClassDeco(cls):
# This class decorator decorates all methods of the target class
for method in cls(): #<----This is just a pseudo codebase
decorate_method()
@ClassDeco
class Test()
def __init__():
pass
def run(a):
# some function calls
if __name__ == "__main__":
t = Test()
p = Pool(processes=len(process_pool))
p.apply_async(t.run, args=(10,))
p.apply_async(t.run, args=(20,))
p.close()
答案 0 :(得分:0)
您应该在读写文件之前将其锁定。检查与python中的文件锁定有关的另一个问题:Locking a file in Python
答案 1 :(得分:0)
您是否听说过多处理/多线程编程中的critical section概念?
如果这样,考虑使用multiprocessing locks一次仅允许一个进程写入文件。