web-dev-qa-db-ja.com

Pythonマルチプロセスプロファイリング

単純なマルチプロセスをプロファイリングする方法を理解するのに苦労していますpythonスクリプト

import multiprocessing
import cProfile
import time
def worker(num):
    time.sleep(3)
    print 'Worker:', num

if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        cProfile.run('p.start()', 'prof%d.prof' %i)

5つのプロセスを開始しているため、cProfileは5つの異なるファイルを生成します。それぞれの内部で、「worker」メソッドの実行に約3秒かかることを確認したいのですが、代わりに「start」メソッド内で何が起こっているのかを確認しています。

これを誰かに説明していただければ幸いです。

更新:承認された回答に基づく実際の例:

import multiprocessing
import cProfile
import time
def test(num):
    time.sleep(3)
    print 'Worker:', num

def worker(num):
    cProfile.runctx('test(num)', globals(), locals(), 'prof%d.prof' %num)


if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()
45
barmaley

あなたはプロセスのスタートアップをプロファイリングしているので、あなたが言うようにp.start()で何が起こっているのかしか見られないのです。そしてp.start()はサブプロセスが開始されると戻ります。サブプロセスで呼び出されるworkerメソッド内でプロファイルを作成する必要があります。

24
zigg