python並行プログラミング - マルチスレッドの同期、非同期処理

以上1件の結果より、今後、ここでまとめて学習するときに学習のpythonマルチプロセスでは、操作の方法は、プロセスは、パラメータの数や発生した問題を受け、

Pool.map()マルチパラメータタスク
次のような所望の結果を達成することができない複数のパラメータの方法をマッピングする方法で通過で

def job(x ,y):
    return x * y

if __name__ == "__main__":
    pool = multiprocessing.Pool()
    res = pool.map(job, 2, 3)
    print res

したがって、この方法は、パッケージを操作する方法は、プロセス中に以下の、複数のパラメータによってカプセル化することができます

def job(x ,y):
    return x * y


def job1(z):
    return job(z[0], z[1])


if __name__ == "__main__":
    pool = multiprocessing.Pool()
    res = pool.map(job1, [(2, 3), (3, 4)])
    print res

したがって、私たちは、伝送パラメータの複数の達成することができます
psのを:あなたは、着信タプルの複数のリストに複数の結果を取得する必要がある場合

Pool.apply_async()出力の反復の結果、複数の
apply_async()メソッドを使用して、複数のパラメータを受信する方法は、この方法で複数のタスクを定義する通常のパラメータは、パラメータは、タプルの形式で渡すことができる
が、伝送のapply_asyncに()メソッドこの方法は、値だけを受信することができるので、反復の複数の結果が得られている複数の値を取得する、以下の式でリストに方法を置くことが可能です

def job(x):
    return x * x


if __name__ == "__main__":
    pool multiprocessing.Pool()
    res = [pool.apply_async(target=job, (i,)) for i in range(3)]
    print [r.get() for r in res]

あなたが仕事の効率を向上させたい場合は、我々はその後、非同期のマルチプロセスの実行、すなわち、同時に処理全体の使命時間の短縮を使用し、複数のサブタスクにタスクを分割するために、タスクを分割することができます。Pythonのマルチプロセッシング・パッケージでは、2つの方法がある別々のタスクを追加し、同時に複数のプロセスを実行することができるどちらの処理を非同期実行されるタスク、apply_async()とmap_async()を、構築することができます。しかし二人は、以下に説明、有意差を持っています。

      apply_asyncため(FUNC、引数)、実行すべきタスクのFUNC関数名、引数は、それぞれに複数回、サブタスクの複数の、FUNCに渡されるパラメータが含まれ、反復することができるようなタプルまたはオブジェクトのリストであります11を追加する)(apply_asyncを呼び出すが、これは複数のプロセスがリストに保存する代わりに起因許可するリストを達成するために解決することができます。map_async(FUNC、反復可能な、チャンク)について、複数のサブタスクが同じ機能によって実行されますが、異なるパラメータで、あなたが反復可能で、リスト内のチャンクサイズ分割によりプロセスとパラメータのパラメータの数を指定することができれば、実際には(合格あなたは11を追加する必要がないように、)ここでチャンク・反復可能な分割の数を表すが、好ましくはプロセスの同数を可能にしました。

       これらは、ちょうど2つ、わずかに異なっているの利益となるよう、多くの重要な違いは、それはそれは手動のプロセスであるため、apply_async()メソッドを経由して指定されたタスクを追加する場合に独立しているので、各プロセス間の結果を個別に保存される、ということですエラーを処理することができるそれらのいくつかが発生したものの、それは、例外が他のプロセスが影響を受けた、とするときに例外を投げるの取得処理の結果れることはありません、スローされますが、また失敗した他のプロセスにつながるものではありません、例外情報が返され、これらのサブパラメータタスクの1つが例外をスローした場合map_async()メソッドの場合は、その任務は、独立したサブパラメータではなく、またすなわち、停止するように他のサブパラメータミッションをもたらし、そして別のスレッドによって異なるタスクを実行するにはいないのサブパラメータ。

      上記比較により、それが効率を改善するための分割タスク、apply_asyncを使用してリストを解析して()メソッドは、子タスクを追加すると、独立した複数のプロセスを実行することである()メソッドは、map_asyncよりも優れているので、この場合に見出されましたapply_async()が最良の選択です。

おすすめ

転載: www.cnblogs.com/sunxiuwen/p/11592271.html