代码之家  ›  专栏  ›  技术社区  ›  Lokesh Agrawal

从报警处理程序更新共享文件时防止脏读/写

  •  0
  • Lokesh Agrawal  · 技术社区  · 6 年前

    我有一个要求,我的进程需要定期更新一个文件(比如每5秒)。在正常的代码流中,这个文件也被更新了多次。

    我使用python警报来中断并定期更新这个共享文件。我正面临着一个脏读的问题,这使我的文件内容混乱。

    示例代码:

    import signal
    import time
    import json
    
    class AlarmException(Exception):
        pass
    
    def alarmHandler(signum, frame):
        numbers = read()
        numbers["4"] = "Four"
        write(numbers)
        print(read())
        
    def write(content):
        file = open("text.txt", "w")
        file.write(json.dumps(content))
        file.flush()
        
    def read():
        file = open("text.txt", "r")
        return(json.load(file))
    
    def dirtyread(timeout=5):
        # Alarm setup, call alarmHandler after 5 seconds
        signal.signal(signal.SIGALRM, alarmHandler)
        signal.alarm(timeout)
        
        # Initialize file
        numbers = {"1": "one", "2": "two"}
        write(numbers)
        
        # Read the file content 
        new_numbers = read()
        
        # Some processing after reading the file content
        time.sleep(7)
        
        # Write new content
        new_numbers["3"] = "Three"
        write(new_numbers)
        print(read())
        
        
    dirtyread()
    

    输出:

    {'1':'1','2':'2','4':'4'}

    {'1':'1','2':'2','3':'3'}

    0 回复  |  直到 6 年前