我正在Raspberry Pi Zero的一个项目中工作,使用apache作为web服务器。该网站是用PHP编写的,它根据用户的输入更新服务器中的XML文件。还有一个python程序程序与web服务器并行运行。这个python程序读取XML并从XML中获取值,将它们存储在本地并检查其中的变化,如果有任何变化,它将与外部设备执行一些UART通信,有时基于这些来自设备的外部通信,python还会更新XML。
Python每2秒读取一次XML,有时问题是,当python执行读取操作时,如果用户探查输入,并且PHP将新值插入到相同的XML中,python就会崩溃。客户端希望将2秒的延迟减少到.1秒,这意味着Python会快速读取,并且任何来自PHP的更改都会使其崩溃。
有没有办法在python和PHP之间建立某种文件锁,这样,当Python正在读取或写入PHP时,以及如果PHP正在编写Python时,都会等待。Python优先于PHP。
发布于 2019-03-25 05:58:39
您可以避免每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()
或者分享你的代码和错误。说得更清楚些。
发布于 2019-03-25 06:02:14
最好先有一个api调用,它会提示数据当前是否正在更改,以及最后一次数据更改的时间。通过这种方式,您可以避免由于共享资源而导致的崩溃
https://stackoverflow.com/questions/55328712
复制相似问题