Python 大型简单XML文件的并发SAX处理?

Python 大型简单XML文件的并发SAX处理?,python,xml,parsing,concurrency,sax,Python,Xml,Parsing,Concurrency,Sax,我有两个巨大的XML文件(10GB-40GB),它们的结构非常简单:只有一个包含多个行节点的根节点。我试图在Python中使用SAX解析它们,但是我必须对每一行进行额外的处理,这意味着40GB文件需要一整天才能完成。为了加快速度,我想同时使用所有内核。不幸的是,SAX解析器似乎无法处理“格式错误”的XML块,这是当您查找文件中的任意行并尝试从此处进行解析时得到的结果。因为SAX解析器可以接受一个流,所以我认为我需要将XML文件划分为八个不同的流,每个流包含[number of rows]/8行,

我有两个巨大的XML文件(10GB-40GB),它们的结构非常简单:只有一个包含多个行节点的根节点。我试图在Python中使用SAX解析它们,但是我必须对每一行进行额外的处理,这意味着40GB文件需要一整天才能完成。为了加快速度,我想同时使用所有内核。不幸的是,SAX解析器似乎无法处理“格式错误”的XML块,这是当您查找文件中的任意行并尝试从此处进行解析时得到的结果。因为SAX解析器可以接受一个流,所以我认为我需要将XML文件划分为八个不同的流,每个流包含[number of rows]/8行,并用假开始和结束标记填充。我该怎么做呢?或者-有没有更好的解决方案,我可能会错过?谢谢大家!

我建议的方法是将整个XML文件读入内部格式,然后进行额外的处理。SAX应该足够快,可以在不超过一小时的时间内读取40GB的XML

根据数据的不同,您可以使用SQLite数据库或HDF5文件进行中间存储


顺便说一下,Python并不是真正的多线程(请参阅)。您需要
多处理
模块将工作划分为不同的过程。

我建议的方法是将整个XML文件读入内部格式,然后进行额外的处理。SAX应该足够快,可以在不超过一小时的时间内读取40GB的XML

根据数据的不同,您可以使用SQLite数据库或HDF5文件进行中间存储


顺便说一下,Python并不是真正的多线程(请参阅)。您需要
多处理
模块将工作划分为不同的过程。

我建议的方法是将整个XML文件读入内部格式,然后进行额外的处理。SAX应该足够快,可以在不超过一小时的时间内读取40GB的XML

根据数据的不同,您可以使用SQLite数据库或HDF5文件进行中间存储


顺便说一下,Python并不是真正的多线程(请参阅)。您需要
多处理
模块将工作划分为不同的过程。

我建议的方法是将整个XML文件读入内部格式,然后进行额外的处理。SAX应该足够快,可以在不超过一小时的时间内读取40GB的XML

根据数据的不同,您可以使用SQLite数据库或HDF5文件进行中间存储


顺便说一下,Python并不是真正的多线程(请参阅)。您需要
多处理
模块将工作拆分为不同的进程。

您不能轻松地将SAX解析拆分为多个线程,而且您不需要:如果您只是在没有任何其他处理的情况下运行解析,它应该在20分钟左右的时间内运行。专注于您对ContentHandler中的数据所做的处理。

您不能轻松地将SAX解析拆分为多个线程,而且您不需要这样做:如果您只是在没有任何其他处理的情况下运行解析,它应该在20分钟左右的时间内运行。专注于您对ContentHandler中的数据所做的处理。

您不能轻松地将SAX解析拆分为多个线程,而且您不需要这样做:如果您只是在没有任何其他处理的情况下运行解析,它应该在20分钟左右的时间内运行。专注于您对ContentHandler中的数据所做的处理。

您不能轻松地将SAX解析拆分为多个线程,而且您不需要这样做:如果您只是在没有任何其他处理的情况下运行解析,它应该在20分钟左右的时间内运行。关注您对ContentHandler中的数据所做的处理。

您能详细说明文件的结构吗?如果结构不是任意嵌套的,您可能根本不需要解析。XML格式:……您能详细说明文件的结构吗?如果结构不是任意嵌套的,您可能根本不需要解析。XML格式:……您能详细说明文件的结构吗?如果结构不是任意嵌套的,您可能根本不需要解析。XML格式:……您能详细说明文件的结构吗?如果结构不是任意嵌套的,您可能根本不需要解析。XML格式:……假设处理可以是独立的,并行的,我建议只处理内存,而不保存和读取磁盘。在一个线程上执行SAX,提取信息片段并将其排入队列()。多个工作线程将每一条信息出列并执行“工作”。假设处理可以是独立的和并行的,我建议纯粹在内存上工作,而不是保存和读取磁盘。在一个线程上执行SAX,提取信息片段并将其排入队列()。多个工作线程将每一条信息出列并执行“工作”。假设处理可以是独立的和并行的,我建议纯粹在内存上工作,而不是保存和读取磁盘。在一个线程上执行SAX,提取信息片段并将其排入队列()。多个工作线程将每一条信息出列并执行“工作”。假设处理可以是独立的和并行的,我建议纯粹在内存上工作,而不是保存和读取磁盘。在一个线程上执行SAX,提取信息片段并将其排入队列()。多个工作线程将每一条信息出列并执行“工作”。看起来我错了:XML处理不是造成瓶颈的原因。相反,它是SQL和Solr访问,这将需要一种不同的方法来修复。(我正在尝试修改以加快工作速度。)看起来我错了:XML处理并不是造成瓶颈的原因。相反,它是SQL和Solr访问,这将需要一种不同的方法来修复。(我正在尝试修改以加快工作速度。)看起来我错了:XML处理并不是造成瓶颈的原因。相反,它是SQL和Solr访问,这将需要一个不同的