Диагностирование, когда я ограничен дисковым вводом / выводом
Я использую Python 2.7 на машине с Linux, и самая медленная часть моего скрипта - это загрузка большого файла json с диска (SSD) с использованием библиотеки ujson. Когда я проверяю top
во время этого процесса загрузка моего процессора в основном составляет 100%, что наводит меня на мысль, что у меня узкое место при анализе json, а не при передаче байтов с диска в память. Это допустимое предположение, чтобы сделать, или ujson будет записывать пустые циклы или что-то в ожидании диска? Мне интересно знать, потому что я не уверен, что выделение другого ядра моего процессора для другого сценария, который выполняет много операций ввода-вывода на диске, значительно замедлит первый сценарий.
1 ответ
Не видя ваш код, я предполагаю, что вы делаете что-то вроде этого:
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)