如何使用Python并行读取/处理大文件

Nod*_*bek 5 python multithreading python-3.x

我几乎有一个大文件20GB,超过2000 万行,每行代表单独的序列化JSON

line by line定期读取文件loop并对行数据执行操作需要花费大量时间

是否有任何state of art方法可以与较小的块并行best practices读取大文件以使处理速度更快?

我正在使用Python 3.6.X

小智 3

很不幸的是,不行。读取文件并对读取的行进行操作(例如 json 解析或计算)是 CPU 密集型操作,因此没有聪明的 asyncio 策略来加速它。理论上可以利用多处理和多核来并行读取和处理,但多个线程读取同一文件必然会导致重大问题。由于文件太大,将其全部存储在内存中然后并行计算也会很困难。

最好的选择是通过将数据(如果可能)分区到多个文件中来解决这个问题,这可以为多核并行打开更安全的大门。抱歉,据我所知,没有更好的答案。