[解決済み] Pythonで並列プログラミングを行うには?
2022-03-04 03:46:02
質問
C++では、OpenMPを使って並列プログラミングができますが、PythonではOpenMPは使えません。Pythonのプログラムの一部を並列化したい場合、どうしたらよいでしょうか。
コードの構造としては、以下のように考えられます。
solve1(A)
solve2(B)
ここで
solve1
と
solve2
は2つの独立した関数です。このようなコードを順番に実行するのではなく、並列に実行して実行時間を短縮するにはどうしたらよいでしょうか。
そのコードは
def solve(Q, G, n):
i = 0
tol = 10 ** -4
while i < 1000:
inneropt, partition, x = setinner(Q, G, n)
outeropt = setouter(Q, G, n)
if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) < tol:
break
node1 = partition[0]
node2 = partition[1]
G = updateGraph(G, node1, node2)
if i == 999:
print "Maximum iteration reaches"
print inneropt
ここで
setinner
と
setouter
は独立した2つの関数です。そこを並列化したいのですが・・・。
どのように解決するのですか?
を使用することができます。 マルチプロセシング モジュールを使用します。この場合、私は処理プールを使うかもしれません。
from multiprocessing import Pool
pool = Pool()
result1 = pool.apply_async(solve1, [A]) # evaluate "solve1(A)" asynchronously
result2 = pool.apply_async(solve2, [B]) # evaluate "solve2(B)" asynchronously
answer1 = result1.get(timeout=10)
answer2 = result2.get(timeout=10)
これは、あなたのために一般的な作業を行うことができるプロセスを生成します。を渡さなかったので
processes
この場合、マシンの各CPUコアに対して1つのプロセスが生成されます。各CPUコアは同時に1つのプロセスを実行することができます。
リストを1つの関数にマッピングしたい場合は、このようにします。
args = [A, B]
results = pool.map(solve1, args)
スレッドを使用しないのは GIL は、Python オブジェクトに対するあらゆる操作をロックします。
関連
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] 2つの機能を同時に実行させる
-
[解決済み] パイソン 複数の関数を同時に実行する
-
[解決済み] PythonのプログラムをC/C++のコードに変換する?
-
[解決済み] 関数を並列に実行するには?