如何进行线程安全 python XML 验证?

How do I do thread-safe python XML validation?

使用 Python 3.3,我需要根据 DTD 或 XSD 验证 XML 文档,并且我希望根据每个规范验证许多文档。我将有一个多线程应用程序执行验证。 lxml documentation 解释了如何针对每种规范类型进行验证。

Lxml 在规范本身的一个数组中记录验证错误,因此我需要为我执行的每个验证准备一份新的规范副本。

不可能(线程安全)每次都重新解析 DTD 规范,因为我的 DTD 包含其他文件,而且我发现有必要将目录更改为包含 DTD 文件的文件夹以获取 lxml找到他们。我不能做线程安全的 cd,所以我在应用程序启动时阅读了所有规范。

不希望重新解析(XSD 或 DTD)规范,因为它需要 I/O 时间和解析时间。

我对规范(DTD 和 XMLSchema 对象)的复制和深度复制尝试彻底失败了。

有没有办法让 lxml 安全地验证?是否有更好的库可以同时支持 XSD 和 DTD,并让我检查线程安全的错误?

在 linux 上,分叉进程获得 parent 内存的 copy-on-write 视图。您可以利用它以很少的开销处理大型 object,而无需更改 parent 内存 space 中的 object。创建 object 后,创建通信管道并分叉 child 来完成工作。 multiprocessing 模块的 Process class 可以为您完成繁重的工作。