使用 Python 3.3,我需要根据 XML 文档的 DTD 或 XSD 验证 XML 文档,并且我希望根据每个规范验证许多文档。我将有一个多线程应用程序来执行验证。 lxml documentation解释如何针对每种规范类型进行验证。
Lxml 在规范本身的数组中记录验证错误,因此我执行的每次验证都需要一份新的规范副本。
每次都无法(线程安全)重新解析 DTD 规范,因为我的 DTD 包含其他文件,并且我发现有必要将目录更改为包含 DTD 文件的文件夹,以便让 lxml 找到它们。我无法制作线程安全的 cd,因此我在应用程序启动时阅读了所有规范。
不希望重新解析任一(XSD 或 DTD)规范,因为它需要 I/O 时间和解析时间。
我对规范(DTD 和 XMLSchema 对象)的复制和深度复制的尝试彻底失败了。
有没有办法让 lxml 安全地验证?是否有更好的库可以使用,可以同时支持 XSD 和 DTD,并让我检查线程安全的错误?
最佳答案
在 Linux 上, fork 进程获取父进程内存的写时复制 View 。您可以利用它来处理大对象,而开销很小,并且无需更改父对象内存空间中的对象。创建对象后,创建用于通信的管道并 fork 一个子对象来完成工作。 multiprocessing
模块的 Process
类可以为您完成繁重的工作。
关于python - 如何进行线程安全的 python XML 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27824160/