如何加快在 Python 中加载和读取 JSON 文件的过程?

Use*_*YmY 9 python json

我正在运行一个脚本(在多处理模式下),它从一堆 JSON 文件中提取一些参数,但目前它非常慢。这是脚本:

from __future__ import print_function, division
import os
from glob import glob
from os import getpid
from time import time
from sys import stdout
import resource
from multiprocessing import Pool
import subprocess
try:
    import simplejson as json
except ImportError:
    import json


path = '/data/data//*.A.1'
print("Running with PID: %d" % getpid())

def process_file(file):
    start = time()
    filename =file.split('/')[-1]
    print(file)
    with open('/data/data/A.1/%s_DI' %filename, 'w') as w:
        with open(file, 'r') as f:
            for n, line in enumerate(f):
                d = json.loads(line)
                try:

                    domain = d['rrname']
                    ips = d['rdata']
                    for i in ips:
                        print("%s|%s" % (i, domain), file=w)
                except:
                    print (d)
                    pass

if __name__ == "__main__":
    files_list = glob(path)
    cores = 12
    print("Using %d cores" % cores)
    pp = Pool(processes=cores)
    pp.imap_unordered(process_file, files_list)
    pp.close()
    pp.join()
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何加快速度?

ale*_*cxe 8

首先,找出你的瓶颈在哪里。

如果它在 json 解码/编码步骤,请尝试切换到ultrajson

UltraJSON 是一个超快的 JSON 编码器和解码器,用纯 C 语言编写,并绑定了 Python 2.5+ 和 3。

更改就像更改导入部分一样简单:

try:
    import ujson as json
except ImportError:
    try:
        import simplejson as json
    except ImportError:
        import json
Run Code Online (Sandbox Code Playgroud)

我还在什么更快 - 加载腌制字典对象或加载 JSON 文件 - 到字典?, 看一看。