当我受到磁盘I限制时进行诊断/

2024-06-08 08:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Linux机器上运行python2.7,到目前为止,我的脚本最慢的部分是使用ujson库从磁盘(SSD)加载一个大型json文件。在这个加载过程中,当我检查top时,我的cpu使用率基本上是100%,这使我认为我是因为解析json而不是通过将字节从磁盘传输到内存而受到了限制。这是一个有效的假设,还是ujson在等待磁盘时会烧空循环或其他什么东西?我有兴趣知道,因为我不确定将cpu的另一个内核用于另一个执行大量磁盘I/o的脚本是否会显著降低第一个脚本的速度。在


Tags: 文件内存脚本机器json字节过程linux
1条回答
网友
1楼 · 发布于 2024-06-08 08:26:26

在没有看到代码的情况下,我假设您正在执行以下操作:

with open('data.json') as datafile:
    data = json.loads(datafile.read())

相反,您可以拆分读取文件和解析文件的步骤:

^{pr2}$

如果添加一些计时调用,则可以确定每个步骤所用的时间:

# Timing decorator from https://www.andreas-jung.com/contents/a-python-decorator-for-measuring-the-execution-time-of-methods
import time                                                

def timeit(method):

    def timed(*args, **kw):
        ts = time.time()
        result = method(*args, **kw)
        te = time.time()

        print '%r (%r, %r) %2.2f sec' % \
              (method.__name__, args, kw, te-ts)
        return result

    return timed

with open('data.json') as datafile:
    @timeit
    raw_data = datafile.read()
    @timeit
    data = json.loads(raw_data)

相关问题 更多 >