我有一个要求,我的进程需要定期更新一个文件(比如每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'}