0

Linux マシンで Python 2.7 を実行していますが、スクリプトの最も遅い部分は、ujsonライブラリを使用してディスク (SSD) から大きな json ファイルをロードすることです。この読み込みプロセス中に確認topすると、CPU 使用率は基本的に 100% であり、ディスクからメモリにバイトを転送するのではなく、json を解析することによってボトルネックが発生していると思われます。これは有効な仮定ですか、それとも ujson はディスクを待っている間に空のループや何かを焼き付けますか? 多くのディスク i/o を実行する別のスクリプト専用に CPU の別のコアを使用すると、最初のスクリプトの速度が大幅に低下するかどうかわからないため、知りたいと思っています。

4

1 に答える 1

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)
于 2015-11-06T17:47:16.063 に答える