回答編集履歴
1
サンプルコードの追加
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
|
+
```
|