タグ付けされた質問 「multiprocessing」

マルチプロセッシングとは、単一のコンピューターシステム内で2つ以上の中央処理装置(CPU)を使用することです。関連する実装と使用法の詳細は、オペレーティングシステムとプログラミング言語によって異なります。したがって、このタグを使用するときは、常にOSと言語の両方のタグを追加してください。

19
複数の引数のためのPythonマルチプロセッシングpool.map
Pythonマルチプロセッシングライブラリには、複数の引数をサポートするpool.mapのバリアントがありますか? text = "test" def harvester(text, case): X = case[0] text+ str(X) if __name__ == '__main__': pool = multiprocessing.Pool(processes=6) case = RAW_DATASET pool.map(harvester(text,case),case, 1) pool.close() pool.join()


8
PythonマルチプロセッシングPicklingError:<type 'function'>をピクルできません
簡単な例ではエラーを再現できず、コードが複雑すぎて投稿できません。通常のPythonではなくIPythonシェルでプログラムを実行すると、うまくいきます。 この問題に関する以前のメモを調べました。それらはすべて、クラス関数内で定義された関数を呼び出すためにプールを使用することによって引き起こされました。しかし、これは私には当てはまりません。 Exception in thread Thread-3: Traceback (most recent call last): File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner self.run() File "/usr/lib64/python2.7/threading.py", line 505, in run self.__target(*self.__args, **self.__kwargs) File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks put(task) PicklingError: Can't pickle &lt;type 'function'&gt;: attribute lookup __builtin__.function failed 何か助けていただければ幸いです。 更新:私が漬け込む機能は、モジュールのトップレベルで定義されています。ネストされた関数を含む関数を呼び出しますが。つまり、ネストされた関数を持つf()呼び出しをg()呼び出し、私はを呼び出しています。、、すべてのトップレベルで定義されています。私はこのパターンでより簡単な例を試しましたが、それはうまくいきます。h()i()pool.apply_async(f)f()g()h()

21
Pythonでマルチプロセッシングを使用しているときにログを記録するにはどうすればよいですか?
現在、Python 2.6 multiprocessingモジュールを使用して複数のプロセスを生成するフレームワークに中央モジュールがあります。を使用しているためmultiprocessing、モジュールレベルのマルチプロセッシング対応ログがありLOG = multiprocessing.get_logger()ます。パードキュメントあなたが文字化けでは最大のものしないように、このロガーは、プロセス共有ロックを持っているsys.stderrと同時に、それに書き込む複数のプロセスを持つこと(または任意のファイルハンドルを)。 私が今持っている問題は、フレームワーク内の他のモジュールがマルチプロセッシングに対応していないことです。私の見方では、この中央モジュールへのすべての依存関係にマルチプロセッシング対応のロギングを使用する必要があります。フレームワークのすべてのクライアントは言うまでもなく、それはフレームワーク内で迷惑です。考えていない代替案はありますか?

12
マルチプロセッシングPool.map()を使用すると、<type 'instancemethod'>をピクルできません
multiprocessingのPool.map()機能を使用して、作業を同時に分割しようとしています。次のコードを使用すると、正常に動作します。 import multiprocessing def f(x): return x*x def go(): pool = multiprocessing.Pool(processes=4) print pool.map(f, range(10)) if __name__== '__main__' : go() ただし、よりオブジェクト指向のアプローチで使用すると、機能しません。表示されるエラーメッセージは次のとおりです。 PicklingError: Can't pickle &lt;type 'instancemethod'&gt;: attribute lookup __builtin__.instancemethod failed これは、以下が私のメインプログラムである場合に発生します。 import someClass if __name__== '__main__' : sc = someClass.someClass() sc.go() そして以下は私のsomeClassクラスです: import multiprocessing class someClass(object): def __init__(self): pass def …

1
multiprocessing.Pool:map_asyncとimapの違いは何ですか?
私は、Pythonの使用方法を学習しようとしているmultiprocessingパッケージを、私は違いを理解していないmap_asyncとimap。map_asyncとimapが非同期で実行されていることに気付きました。では、どちらをいつ使用すればよいですか?そして、どのようにして返された結果を取得する必要がありますmap_asyncか? このようなものを使用する必要がありますか? def test(): result = pool.map_async() pool.close() pool.join() return result.get() result=test() for i in result: print i

18
マルチプロセッシング:クラスで定義された関数でPool.mapを使用する方法
私が次のようなものを実行すると: from multiprocessing import Pool p = Pool(5) def f(x): return x*x p.map(f, [1,2,3]) それは正常に動作します。ただし、これをクラスの関数として配置すると、次のようになります。 class calculate(object): def run(self): def f(x): return x*x p = Pool() return p.map(f, [1,2,3]) cl = calculate() print cl.run() 次のエラーが表示されます。 Exception in thread Thread-1: Traceback (most recent call last): File "/sw/lib/python2.6/threading.py", line 532, in __bootstrap_inner …


1
Python 3でのConcurrent.futuresとマルチプロセッシング
Python 3.2では、Concurrent Futuresが導入されました。これは、古いスレッド化モジュールとマルチプロセッシングモジュールの高度な組み合わせのようです。 これを古いマルチプロセッシングモジュールよりもCPUバウンドタスクに使用することの利点と欠点は何ですか? この記事は、作業がはるかに簡単であることを示唆しています。

6
スレッドモジュールとマルチプロセッシングモジュールの違いは何ですか?
threadingとのmultiprocessingモジュールをPythonで使用して特定の操作を並行して実行し、コードを高速化する方法を学んでいます。 threading.Thread()オブジェクトとオブジェクトの違いが何であるかを理解するために、これについて(理論的な背景がないので)難しいと感じていますmultiprocessing.Process()。 また、ジョブのキューをインスタンス化し、4つ(たとえば)だけを並行して実行し、他のリソースが実行される前にリソースが解放されるのを待つ方法は、私には完全には明らかではありません。 ドキュメントの例は明確ですが、完全ではありません。少し複雑にしようとすると、多くの奇妙なエラーが表示されます(酸洗いできないメソッドなど)。 では、threadingとmultiprocessingモジュールをいつ使用すればよいですか? これら2つのモジュールの背後にある概念と、それらを複雑なタスクに適切に使用する方法を説明するリソースに私をリンクできますか?

10
Pythonのマルチプロセッシングプールでのキーボード割り込み
PythonのマルチプロセッシングプールでKeyboardInterruptイベントを処理するにはどうすればよいですか?以下に簡単な例を示します。 from multiprocessing import Pool from time import sleep from sys import exit def slowly_square(i): sleep(1) return i*i def go(): pool = Pool(8) try: results = pool.map(slowly_square, range(40)) except KeyboardInterrupt: # **** THIS PART NEVER EXECUTES. **** pool.terminate() print "You cancelled the program!" sys.exit(1) print "\nFinally, here are the results: …

3
numpyをインポートした後、マルチプロセッシングが単一コアのみを使用するのはなぜですか?
これがOSの問題としてそれ以上に数えられるかどうかはわかりませんが、誰かがPythonの終わりから何らかの洞察を持っている場合に備えて、ここで尋ねると思いました。 をfor使用してCPU負荷の高いループを並列化しようとしましたがjoblib、各ワーカープロセスが異なるコアに割り当てられる代わりに、すべてのワーカープロセスが同じコアに割り当てられ、パフォーマンスが向上しないことに気づきました。 これは非常に簡単な例です... from joblib import Parallel,delayed import numpy as np def testfunc(data): # some very boneheaded CPU work for nn in xrange(1000): for ii in data[0,:]: for jj in data[1,:]: ii*jj def run(niter=10): data = (np.random.randn(2,100) for ii in xrange(niter)) pool = Parallel(n_jobs=-1,verbose=1,pre_dispatch='all') results = pool(delayed(testfunc)(dd) for dd in …

4
マルチプロセッシングの共有メモリオブジェクト
私はメモリに大きなnumpy配列があるfuncとします。この巨大な配列を(他のいくつかのパラメーターと共に)入力として受け取る関数があります。func異なるパラメータを使用して、並行して実行できます。例えば: def func(arr, param): # do stuff to arr, param # build array arr pool = Pool(processes = 6) results = [pool.apply_async(func, [arr, param]) for param in all_params] output = [res.get() for res in results] マルチプロセッシングライブラリを使用すると、その巨大な配列が複数のプロセスにコピーされます。 異なるプロセスに同じ配列を共有させる方法はありますか?この配列オブジェクトは読み取り専用であり、変更されることはありません。 arrが配列ではなく任意のpythonオブジェクトである場合、もっと複雑なことは何ですか?それを共有する方法はありますか? [編集済み] 私は答えを読みましたが、私はまだ少し混乱しています。fork()はコピーオンライトであるため、Pythonマルチプロセッシングライブラリで新しいプロセスを生成するときに追加のコストを呼び出さないでください。しかし、次のコードは大きなオーバーヘッドがあることを示唆しています: from multiprocessing import Pool, Manager import numpy as np; import …

5
Pythonマルチプロセッシングを試みるWindowsでのRuntimeError
私は、Windowsマシンでスレッディングとマルチプロセッシングを使用して、初めての正式なpythonプログラムを試しています。ただし、プロセスを起動できません。pythonでは次のメッセージが表示されます。問題は、メインモジュールでスレッドを起動していないことです。スレッドは、クラス内の別のモジュールで処理されます。 編集:ちなみに、このコードはubuntuで正常に実行されます。ウィンドウズではない RuntimeError: Attempt to start a new process before the current process has finished its bootstrapping phase. This probably means that you are on Windows and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be …

5
マルチプロセッシング:複数のプロセス間でディクテーションを共有するにはどうすればよいですか?
結合可能なキューで動作するいくつかのプロセスを作成し、Q最終的にグローバルディクショナリDを操作して結果を保存するプログラム。(したがって、各子プロセスはDその結果を格納し、他の子プロセスが生成している結果を確認するために使用できます) 子プロセスでディクショナリDを印刷すると、ディクショナリ(つまり、D)で行われた変更が表示されます。しかし、メインプロセスがQに参加した後、Dを出力すると、空の辞書になります。 同期/ロックの問題であることを理解しています。ここで何が起こっているのか、Dへのアクセスを同期する方法を誰かに教えてもらえますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.