回答編集履歴

1

説明追加

2021/03/04 08:01

投稿

ppaul
ppaul

スコア24670

test CHANGED
@@ -1,4 +1,12 @@
1
+ 真剣に並列処理を勉強したいのであれば、teamiklが書かれているような勉強をしてください。
2
+
3
+
4
+
5
+ 手早く実現したいのであれば、プロセスとシグナルで実行する方法よりも、スレッドを使えば、メモリを共有しているのでフラグを決めておいて親スレッドがフラグに書き込み、子スレッドがときどきフラグをチェックして終了するというのが最も簡単です。子スレッド側はフラグに書き込まないので排他制御も必要ありません。
6
+
7
+
8
+
1
- 処理が単純なループならば、以下のようにして抜けることが出来ます。
9
+ 処理が単純なループならば、以下のようにして実現することが出来ます。
2
10
 
3
11
 
4
12
 
@@ -78,6 +86,18 @@
78
86
 
79
87
  ```
80
88
 
89
+ これを実行すると、thread1はターミナルに対して1秒ごとにHelloを表示し続けます。
90
+
91
+ 親スレッドはtkinterを使ってボタンを表示します。tkinterのボタンを押すと、関数stopが呼び出されてフラグであるLIVEをFalseに変更します。
92
+
93
+ すると、次のタイミングでLIVEをチェックした子スレッドはtryに向けて大域脱出して終了します。
94
+
95
+
96
+
97
+ 実際の動きは実行してみればわかるはずです。
98
+
99
+
100
+
81
101
  単純なループでなければ、問題が起きそうな場所に
82
102
 
83
103
 
@@ -90,4 +110,4 @@
90
110
 
91
111
  ```
92
112
 
93
- を入れておけば、そのうちに止まります。
113
+ を入れておけば、そ来た時点で止まります。(関数化しておいて呼び出した方がわかりやすいでしょう)