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

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

新規登録して質問してみよう
ただいま回答率
85.30%
Python

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

Q&A

解決済

1回答

11207閲覧

【python】threadを終了して再度実行したい

hachimitu

総合スコア36

Python

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

0グッド

0クリップ

投稿2019/07/02 11:19

#やりたいこと
gui画面の"start communication"ボタンがクリックされるたびにthread"thread_read_data "を実行させたい

#マルチスレッドライブラリインポート import threading import time #データフレーム定義 class com_master: def __init__(self): #マルチスレッド処理定義 self.thread_read_data = threading.Thread(target = self.process_com_start) def btn_press_com_start(self): self.thread_read_data.start() def process_com_start(self): pass #window作成 root = tk.Tk() #メインウィンドウの作成 root.geometry("450x350") #通信機能classインスタンス生成 ins_com_nucreo = com_master(PC_TO_MST_DATA_SiZE,MST_TO_PC_DATA_SIZE) button_start_com = tk.Button(text = "start communication", command = ins_com_nucreo.btn_press_com_start) button_start_com .pack() root.mainloop()

#エラー内容
"threadは一回きりしかstartできません"。とエラーを出します。

#質問
threadを終了させて再度スタートさせたい場合はどうしたらよろしいでしょうか。お手数をおかけしますが宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

patch

1- self.thread_read_data = threading.Thread(target = self.process_com_start) 2 def btn_press_com_start(self): 3+ self.thread_read_data = threading.Thread(target = self.process_com_start) 4 self.thread_read_data.start()

ということでよろしいのでしょうか?

投稿2019/07/02 11:30

hayataka2049

総合スコア30939

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

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

hachimitu

2019/07/02 11:58

"ということでよろしいのでしょうか?" ⇒よろしかったです! できました。ありがとうございます!助かりました! ちなみに質問なんですが 1 threadを再定義しなおせば,何回もthreadを開始できる?でよいのでしょうか 2process_com_startの処理が終了すればthreadは終了しているでよいのでしょうか お手数をおかけしますが宜しくお願い致します。
hayataka2049

2019/07/02 12:15

>1 threadを再定義しなおせば,何回もthreadを開始できる?でよいのでしょうか 再定義しているので、別のスレッドです。 >2process_com_startの処理が終了すればthreadは終了しているでよいのでしょうか いえ、特にそういう保証はありません。なので、すごく時間のかかる関数を実行させれば、多重に実行される可能性もあります。必要ならロックを使うなどして重複実行されないようにしてください。
hachimitu

2019/07/02 12:35

アドバイスありがとうございます。理想は下記なので、もうちょっと頑張ってみます。 1ボタンが押される 2thread1が走る 3thread1の処理内容が終了する 4thread1が待機状態になる 5さいどボタンが押される 6thread1の処理が再開する
hayataka2049

2019/07/02 12:47

文字通りの「一時停止」の機能は存在しません。 >スレッドの破壊 (destroy)、中断 (stop)、一時停止 (suspend)、復帰 (resume)、割り込み (interrupt) は行えません。 https://docs.python.org/ja/3/library/threading.html まあ、処理内容が「すぐに」終了するのであれば、この回答の方法でも同じことですが……それとも、終了時の状態を保持しておきたい、という要件でしょうか(工夫すれば毎回スレッドを立ち上げてもできそうです)
hachimitu

2019/07/03 14:22

"それとも、終了時の状態を保持しておきたい、という要件でしょうか" ⇒ちがいます。基本的には、終了です。 guiのボタンが押されるたびに別スレッドが立ち上がって処理するで多分問題解決だと思います。 ちなみに threading.active.countを使って、ボタンが押されて処理中の時と、処理集後のアクティブスレッド数を数えました。処理終了時のアクティブスレッド数が1減っていたので、threadは終了していると思います。 色々と教えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問