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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

4168閲覧

並列処理させているスレッドからの関数戻り値の戻し方

suhsuu

総合スコア15

並列処理

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2018/09/23 14:29

前提・実現したいこと

2つのポート先(COM6, COM7)先にある各クライアントから、⓵画像と⓶時間の情報(クライアント先でアクションが発生した時間)を受信する。
そして、得た2つの画像を各path先に保存し、各クライアントから取得した2つの時間の情報を演算処理する。

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

並列処理させているスレッドから、どのようにして戻り値を取得すればよいかわかりません。(関数 def sub_main(port, path)からの戻り値sc_timeの戻し方についてです )

該当のソースコード

Python3

1from PIL import Image 2import threading 3import serial 4 5#詳細省略 6 7def sub_main(port, path): 8 sc_time = stamp_receive(port) #stamp_receive(port)はport先から時間情報をシリアル受信する関数です 9 10  # 中略 port先から画像を受信 11 12 img.save(path, quality=75) #受信した画像を所定のpathに保存 13 return sc_time #←この戻り値をどう処理すればよいのかわかりません 14 15thread_obj = threading.Thread(target=sub_main, 16 kwargs={"port": "COM7", 17 "path": "./images/decoded_img_b.jpg"} ) 18 # argsは位置引数、シーケンスで指定。kwargsはキーワード引数、辞書で指定 19thread_obj.start() # targetに指定したオブジェクトを実行 20sc_time_a = sub_main("COM6", "./images/decoded_img_a.jpg") 21 22#この後、2つの時間情報を演算処理する予定 23

試したこと

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答2

0

ベストアンサー

単純に外で値を使いたいのなら、グローバル変数にでも入れてください。

python

1def sub_main(port, path): 2 global sc_time 3 sc_time = stamp_receive(port) #stamp_receive(port)はport先から時間情報をシリアル受信する関数です 4 5  # 中略 port先から画像を受信 6 7 img.save(path, quality=75) #受信した画像を所定のpathに保存

投稿2018/09/23 16:50

hayataka2049

総合スコア30933

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

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

suhsuu

2018/09/24 03:38

なるほど。それが一番シンプルな対処方ですね。 ありがとうございます。
guest

0

各ポートから一度だけ受信して演算する、と言うなら、スレッドを作る意味はありません。素直に同期処理させましょう

複数受信する、というのであれば戻り値で受信結果を得る設計ではダメです
グローバル変数に受信結果と受信済フラグなどを設定するようにして、メインルーチンで双方データが揃ったら演算を行うという処理のシーケンスを組みましょう

投稿2018/09/23 14:43

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問