1

Python スクリプトで、関数の 1 つをサブプロセスとして実行できるようにしたいと考えています。どうすればいいですか?

これが私の意図のモックアップスクリプトです。

#!/urs/bin/env python

def print_mynumber(foo):
    """This function is obviously more complicated in my script.
    It should be run as a subprocess."""
    print(foo)

for foo in [1,2,3]:
    print_mynumber(foo) # Each call of this function should span a new process.
    # subprocess(print_mynumber(foo))

ご提案いただきありがとうございます。問題を正しく定式化して、適切な Web 検索を行うのは少し難しいです。

4

1 に答える 1

7

マルチプロセッシング モジュールを使用します。

import multiprocessing as mp

def print_mynumber(foo):
    """This function is obviously more complicated in my script.
    It should be run as a subprocess."""
    print(foo)

if __name__ == '__main__':
    for foo in [1,2,3]:
        proc = mp.Process(target = print_mynumber, args = (foo, ))
        proc.start()

への呼び出しごとに 1 つのプロセスを作成したくない場合があります。print_mynumber特に、foo反復するリストが長い場合はそうです。その場合のより良い方法は、マルチプロセッシング プールを使用することです。

import multiprocessing as mp

def print_mynumber(foo):
    """This function is obviously more complicated in my script.
    It should be run as a subprocess."""
    print(foo)

if __name__ == '__main__':
    pool = mp.Pool()
    pool.map(print_mynumber, [1,2,3])

デフォルトでは、プールは N 個のワーカー プロセスを作成します。ここNで、 はマシンが所有する CPU (またはコア) の数です。は、タスクをワーカーのプールにファーム アウトする点を除いて、Python の組み込みコマンドとpool.mapほとんど同じように動作します。map

于 2012-10-10T03:04:00.877 に答える