回答編集履歴

1

サンプルコードの追加

2017/01/05 01:46

投稿

uni8inu
uni8inu

スコア127

test CHANGED
@@ -36,8 +36,6 @@
36
36
 
37
37
  time.sleep(100) # 追記 / stopで孫threadが止まるはずなのに、実行続く
38
38
 
39
- コード
40
-
41
39
  ```
42
40
 
43
41
 
@@ -53,3 +51,47 @@
53
51
 
54
52
 
55
53
  対策としては、threadではなくmultiprocessingを使うと良いかもしれません。terminate()関数により強制停止が可能なようです。(あまり知識がないので、もっと良い方法があるかもしれませんが…)
54
+
55
+
56
+
57
+ ##(追記)stop()の実装
58
+
59
+ やりたいこととぜんぜん違うかもしれませんが、以下でstop的な動作になりました。
60
+
61
+ threadをkillする手段が無い以上、worker(thread)内部に停止コード仕込むしかない、と考えます。
62
+
63
+ [Qiitaでもpythonのthread記事は荒れてました。](http://qiita.com/tag1216/items/2dcb112f8018eb19a999#_reference-2affe5b053d4748ec49b)
64
+
65
+ ```python
66
+
67
+ class BotClass:
68
+
69
+ # (前略)
70
+
71
+ def _thread_three(self):
72
+
73
+ for i in range(5):
74
+
75
+ if not self.listening: # add
76
+
77
+ break # add
78
+
79
+ time.sleep(2)
80
+
81
+ print(threading.currentThread().getName() + ': ' + str(i))
82
+
83
+
84
+
85
+ def _thread_four(self):
86
+
87
+ for i in range(5):
88
+
89
+ if not self.listening: # add
90
+
91
+ break # add
92
+
93
+ time.sleep(3)
94
+
95
+ print(threading.currentThread().getName() + ': ' + str(i))
96
+
97
+ ```