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

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

新規登録して質問してみよう
ただいま回答率
85.50%
並列処理

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

バックグラウンド処理

バックグラウンド処理とは、マルチタスク環境において、ユーザーに対して前面に表示させている処理の裏側で実行させる処理のことを呼びます。バックグラウンド処理を行う事によって、ユーザーが他の作業に携わることが可能となります。

Q&A

1回答

991閲覧

concurrentを用いた並列処理(センサー・処理出力の並列処理)

sonpay

総合スコア0

並列処理

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

バックグラウンド処理

バックグラウンド処理とは、マルチタスク環境において、ユーザーに対して前面に表示させている処理の裏側で実行させる処理のことを呼びます。バックグラウンド処理を行う事によって、ユーザーが他の作業に携わることが可能となります。

0グッド

0クリップ

投稿2021/06/13 13:35

前提・実現したいこと

2次元のセンサー入力データを2次元行列に変換し,その行列を入力として処理を行い,すぐに結果を表示させるシステムを実現したいと思っております.現在のプログラムは,「センサー入力データの変換ー>処理と表示」と逐次なっているため,センサー入力の変換をしている間は,結果表示が止まってしまいます.

なので,「センサー入力・行列変換」と「処理+結果表示」を並列プロセスで行えるプログラムにしたいと思っております.

ここに質問の内容を詳しく書いてください。
concurrent.futuresを使って並列処理をしようとしているのですが,executor.submitを使うと「np.arrayは使えない」とエラーになり,executor.mapを使ってイテレータで出力すると,結果が[]になってしまいます.

発生している問題・エラーメッセージ

executor.submitの場合
TypeError: 'numpy.ndarray' object is not callable`
executor.map

[] ### 該当のソースコード def func(x,y,z): ,,, return(2d-array) executor = concurrent.futures.ThreadPoolExecutor(max_workers=2) rets = executor.map(func(a, b, c)) tmp = np.fromiter(rets, int) print(tmp) もしくは, executor = concurrent.futures.ThreadPoolExecutor(max_workers=2) rets = executor.submit(func(a, b, c)) print(rets.result()) ### 試したこと executor.submit result()を試しましたが,np.ndarrayは呼び出せない(以上のエラー)となる. そこで,executor.mapを試しましたが,[]となって値を渡せません.

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

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

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

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

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

guest

回答1

0

まず、Pythonの関数呼び出しの評価順序(計算順序)について理解してください。

python

1>>> def function1(n): 2... print('function1 received parameter n =', n) 3... return n + 2 4... 5>>> def function2(n): 6... print('function2 received parameter n =', n) 7... return n * 10 8... 9>>> function1(function2(4)) 10function2 received parameter n = 4 11function1 received parameter n = 40 1242

上記のコードではfunction1の引数にfunction2の実行結果を与えています。
その場合、まず、function2(4)が計算されて、その結果をfunction1が受け取ることになります。

rets = executor.submit(func(a, b, c))
を実行するということは、まずfunc(a, b, c)を(親スレッドで)実行して、その結果をworkerで実行してくださいとexecuterに依頼するということです。
ところが、func(a, b, c)の結果はndarrayなので実行できないですよというエラーが出ています。

executer.submitの引数が何であるかはExecutor オブジェクトに書かれていますので、それを読めば解決策は簡単にわかるはずです。

投稿2021/06/14 01:36

ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問