诊断我何时受到磁盘限制 i/o
diagnosing when I'm being limited by disk i/o
我在 Linux 机器上 运行 Python 2.7,到目前为止我脚本中最慢的部分是从磁盘加载一个大的 json 文件( SSD)使用 ujson 库。当我在这个加载过程中检查 top
时,我的 cpu 使用率基本上是 100%,这让我相信我的瓶颈是解析 json 而不是传输字节从磁盘到内存。这是一个有效的假设,还是 ujson 在等待磁盘时会烧掉空循环或其他东西?我很想知道,因为我不确定将我的 cpu 的另一个核心用于另一个执行大量磁盘 i/o 的脚本是否会显着减慢第一个脚本的速度。
没有看到你的代码,我假设你正在做这样的事情:
with open('data.json') as datafile:
data = json.loads(datafile.read())
相反,您可以拆分读取文件和解析文件的步骤:
with open('data.json') as datafile:
raw_data = datafile.read()
data = json.loads(raw_data)
如果添加一些计时调用,您可以确定每一步花费的时间:
# 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)
我在 Linux 机器上 运行 Python 2.7,到目前为止我脚本中最慢的部分是从磁盘加载一个大的 json 文件( SSD)使用 ujson 库。当我在这个加载过程中检查 top
时,我的 cpu 使用率基本上是 100%,这让我相信我的瓶颈是解析 json 而不是传输字节从磁盘到内存。这是一个有效的假设,还是 ujson 在等待磁盘时会烧掉空循环或其他东西?我很想知道,因为我不确定将我的 cpu 的另一个核心用于另一个执行大量磁盘 i/o 的脚本是否会显着减慢第一个脚本的速度。
没有看到你的代码,我假设你正在做这样的事情:
with open('data.json') as datafile:
data = json.loads(datafile.read())
相反,您可以拆分读取文件和解析文件的步骤:
with open('data.json') as datafile:
raw_data = datafile.read()
data = json.loads(raw_data)
如果添加一些计时调用,您可以确定每一步花费的时间:
# 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)