我正在Raspberry Pi Zero中使用Apache作为Web服务器来开发一个项目。该网站使用PHP,并根据用户输入,更新服务器中的XML文件。 还有一个与网络服务器并行运行的python程序程序。该python程序不断读取XML并从XML中获取值,将其存储在本地并检查其中是否有更改,如果有任何更改,它会与外部设备进行一些UART通信,有时基于这些设备的外部通信,python更新XML。
Python每隔2秒读取一次XML,有时问题是,当python执行读取操作时,如果用户提供输入内容,并且PHP将新值插入相同的XML,则python崩溃。客户端希望将2秒的延迟减少到0.1秒,这意味着Python将快速读取数据,而对PHP所做的任何更改都会使其崩溃。
是否有一种方法可以在python和PHP之间获得某种文件锁定,以便在Python读取或编写PHP等待时以及PHP在编写Python等待时。优先级高于PHP的Python。
答案 0 :(得分:0)
您可以避免每2秒钟读取一次,只需检查文件是否已修改,然后再对该文件执行读取或写入操作即可。这是一种优化的方式。
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print(f'event type: {event.event_type} path : {event.src_path}')
if __name__ == "__main__":
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='YOUR_DIR_PATH_TO_WATCH', recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
或分享您的代码和错误。更加清楚。
答案 1 :(得分:0)
最好先进行api调用,该调用会建议当前是否正在更改数据以及最后一次更改数据的时间。 这样,您可以避免由于资源共享而发生的崩溃