Pool.apply、Pool.apply_asyncおよびPool.mapの使用例で明確な例は見ていません。私は主にPool.map
を使用しています。他の人の利点は何ですか?パイソンの昔マルチプロセッシング.Pool:apply、apply_asyncまたはmapを使用するタイミングは?
答えて
戻る、任意の引数を持つ関数を呼び出すために、あなたはapply
使用します。
apply(f,args,kwargs)
apply
まだいえないのpython3でPython2.7に存在し、一般的にはもう使用されていません。現在、
f(*args,**kwargs)
が好ましい。 multiprocessing.Pool
モジュールは同様のインターフェイスを提供しようとします。
Pool.apply
は、Python apply
と似ていますが、機能コールは別のプロセスで実行されます。機能が完了するまでブロックPool.apply
をブロックします。
Pool.apply_async
もPythonの組み込みのapply
に似ていますが、結果を待たずにすぐに呼び出しを返す点が異なります。 ApplyResult
オブジェクトが返されます。 get()
メソッドを呼び出して、関数呼び出しの結果を取得します。 get()
メソッドは、機能が完了するまでブロックします。したがって、pool.apply(func, args, kwargs)
はpool.apply_async(func, args, kwargs).get()
に相当します。
Pool.apply
とは対照的に、Pool.apply_async
メソッドには、関数が完了したときに呼び出されるコールバックもあります。これはget()
を呼び出す代わりに使用できます。例えば
:
import multiprocessing as mp
import time
def foo_pool(x):
time.sleep(2)
return x*x
result_list = []
def log_result(result):
# This is called whenever foo_pool(i) returns a result.
# result_list is modified only by the main process, not the pool workers.
result_list.append(result)
def apply_async_with_callback():
pool = mp.Pool()
for i in range(10):
pool.apply_async(foo_pool, args = (i,), callback = log_result)
pool.close()
pool.join()
print(result_list)
if __name__ == '__main__':
apply_async_with_callback()
はpool.map
とは異なり、結果の順序はpool.apply_async
呼び出しが行われた順序に対応しないことがあり、そのような
[1, 0, 4, 9, 25, 16, 49, 36, 81, 64]
注意として結果をもたらすことができます。あなたが別のプロセスで関数を実行する必要がありますが、その関数が戻るまでブロックに現在のプロセスをしたい場合
ので、Pool.apply
を使用しています。 Pool.apply
のように、Pool.map
は、完全な結果が返されるまでブロックします。
ワーカープロセスのプールで多数の関数呼び出しを非同期に実行する場合は、Pool.apply_async
を使用します。結果のの注文は、Pool.apply_async
への呼び出しの順序と同じであることが保証されていません。
と異なるの機能をPool.apply_async
と呼ぶこともできます(すべての呼び出しで同じ機能を使用する必要はありません)。
対照的に、Pool.map
は、同じ機能を多くの引数に適用します。 しかし、Pool.apply_async
とは異なり、結果は引数の順序に対応する順序で返されます。map
対apply
について
:
pool.apply(f, args)
:f
はプールだけの労働者のいずれかで実行されます。したがって、プール内の1つのプロセスがf(args)
を実行します。
pool.map(f, iterable)
:このメソッドは、iterableをいくつかのチャンクに分割し、プロセスプールに別々のタスクとしてサブミットします。したがって、プール内のすべてのプロセスを利用できます。
iterableがジェネレータの場合はどうすればいいですか –
うーん...良い質問です。正直言って私は発電機でプールを使用したことはありませんが、このスレッドは参考になるかもしれません:https://stackoverflow.com/questions/5318936/python-multiprocessing-pool-lazy-iteration – kakhkAtion
@kakhkAtion適用については、残りの労働者は何をしていますか?他の従業員にタスクを実行させるために複数回適用を呼び出す必要がありますか? – Moondra
- 1. Pythonマルチプロセッシングのstarmapとapply_asyncの比較は速いですか?
- 2. undef_methodを使用するタイミングとremove_methodを使用するタイミングは?
- 3. apply_asyncにメソッドを渡したり、Pythonマルチプロセッシングでマップすることはできますか?
- 4. InvalidOperationExceptionまたはNotSupportedExceptionを使用するタイミングは?
- 5. enum、class、またはtagsを使用するタイミングは?
- 6. NavigatorまたはPackage Explorerビューを使用するタイミングは?
- 7. ピラミッドでroute_urlまたはroute_pathを使用するタイミングは?
- 8. スキームまたはラケットで関数を使用するタイミングとマクロを使用するタイミング
- 9. Python 3では、マルチプロセッシングのapply_asyncで機能するのはなぜですか、クロージャもラムダもありません。
- 10. Pythonのマルチプロセッシングapply_async "0>左の主張" AssertionErrorが
- 11. Server.TransferまたはResponse.Rewriteを使用するタイミング
- 12. クエリまたはコードを使用するタイミング
- 13. Requirejsを使用するタイミングとバンドルされたjavascriptを使用するタイミング
- 14. タスクを使用するタイミングとスレッドを使用するタイミング
- 15. viewDidLoadを使用するタイミングとawakeFromNibを使用するタイミング
- 16. assert()を使用するタイミングとtry catchを使用するタイミング
- 17. "return result"を使用するタイミングと "self.result"を使用するタイミング
- 18. Spark2.0でrddを使用するタイミングは?
- 19. getAutowireCapableBeanFactory()。autowireBean(someBean)を使用するタイミングは?
- 20. Caffeでインプレースレイヤーを使用するタイミングは?
- 21. ビジュアルディフィーリングとユニファイドディフパッチファイルを使用するタイミングは?
- 22. プラグインでNPN_ReleaseVariantValueを使用するタイミングは?
- 23. IIFE対オブジェクトリテラルを使用するタイミングは?
- 24. Dartでインターフェイスを使用するタイミングは?
- 25. PageRoadでPreRenderを使用するタイミングは?
- 26. Springでjavax.inject.Providerを使用するタイミングは?
- 27. Backbone.View vs. Backbone.Marionette.ItemViewを使用するタイミングは?
- 28. Rでペアリストを使用するタイミングは?
- 29. 「getResourceAsStream」メソッドを使用するタイミングは?
- 30. ExecuteScalar、ExecuteReader、ExecuteNonQueryを使用するタイミングは?
Windows上で 'apply_async_with_callback()'の前に 'if __name __ ==" __ main __ "'があるべきですか? – jfs
はい、ありがとうございます。 – unutbu
ありがとうございました。 map_asyncはどうですか? –