質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

並列処理

複数の計算が同時に実行される手法

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2187閲覧

multiprocessing の manager で二次元配列を使うと値が変わらない

kingsman3312

総合スコア7

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

並列処理

複数の計算が同時に実行される手法

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/19 08:56

multiprocessing の manager.list に二次元配列を与えて以下の処理を行ったら二次元配列の shared_list の値が変わりませんでした。
エラーが起きるわけではなく、一切値が変わっていない二次元配列が出力されました
理由が分かる方いましたら、ご教授願います。

python

1from multiprocessing import Process, Manager 2 3#100足していく関数 4def add(list): 5 6 for i in range(len(list)): 7 for j in range(len(list[i])): 8 list[i][j] += 100 9 10 11 12if __name__ == "__main__": 13 14 manager = Manager() 15 16 test = [[1, 2, 3], [4, 5, 6]] 17 18 #共有リストを作成 19 shared_list = manager.list(test) 20 21 #プロセス作成  22 p1 = Process(target = add, args = (shared_list,)) 23 24 p1.start() 25 p1.join() 26 27 print(shared_list) 28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Pythonでmultiprocessing.Manager()はどのように機能しますか?に書かれているように

マネージャープロキシオブジェクトは、コンテナー内の(管理されていない)可変オブジェクトに加えられた変更を伝達できません。つまり、manager.list()オブジェクトがある場合、管理リスト自体への変更は他のすべてのプロセスに伝播されます。しかし、通常のPython listinsideそのリストがある場合、内部リストへの変更は伝播されません。マネージャーには変更を検出する方法がありません。

なので、ご質問のコードでは変更が反映されません。

変更を伝播するには、ネストされたリストにもmanager.list()オブジェクトを使用する必要があります( Python 3.6以降 が必要)、またはmanager.list()を変更する必要があります。

とあるので、試してみてください。

投稿2021/11/19 09:36

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問