【问题标题】:Handling a common XML file between PHP and Python处理 PHP 和 Python 之间的通用 XML 文件
【发布时间】:2019-03-24 21:23:14
【问题描述】:

我正在 Raspberry Pi Zero 中开展一个项目,使用 apache 作为 Web 服务器。该网站使用 PHP,并根据用户输入更新服务器中的 XML 文件。 还有一个 python 程序程序与 Web 服务器并行运行。这个 python 程序不断读取 XML 并从 XML 中获取值,将它们存储在本地并检查它们的变化,如果有任何变化,它会与外部设备执行一些 UART 通信,有时基于来自设备的这些外部通信,python 也更新 XML。

Python 每 2 秒读取一次 XML,有时问题是,当 python 执行读取操作时,如果用户提供输入并且 PHP 将新值插入到相同的 XML 中,python 会崩溃。客户端希望将 2 秒延迟减少到 0.1 秒,这意味着 Python 将快速读取,并且 PHP 的任何更改都会使其崩溃。

有没有办法在 python 和 PHP 之间获得某种文件锁定,这样,当 Python 正在读取或写入 PHP 时,如果 PHP 正在写入,则 Python 会等待。 Python 优先于 PHP。

【问题讨论】:

    标签: php python xml file-handling file-locking


    【解决方案1】:

    您可以避免每 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()
    

    或分享您的代码和错误。要更清楚。

    【讨论】:

    【解决方案2】:

    最好先调用 api 来提示当前是否正在更改数据以及最后一次更改数据的时间。 这样可以避免由于资源共享而发生的崩溃

    【讨论】:

      猜你喜欢
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 2011-08-23
      • 2011-02-18
      • 1970-01-01
      • 2014-05-23
      相关资源
      最近更新 更多