teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

誤字修正

2020/07/04 21:24

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  どのような処理の関数を停止したいのかは解りませんが、
2
- スレッド自体は一旦止めるという操作を出来ないので、
2
+ スレッド自体は一旦止めるという操作を出来ないので、
3
3
  自身で関数をそのように実装する必要があります。
4
4
 
5
5
  - 通常のスレッド内の「ループ処理」であれば、threading.Event が使えます

2

エラー原因について

2020/07/04 21:24

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -6,4 +6,13 @@
6
6
  y_waiwai さんの仰られてるフラグの仕組みに該当する部分です。
7
7
 
8
8
  サンプルコード: [Teratail 261628](https://teratail.com/questions/261628) スレッドで停止・再開する場合のサンプル
9
- [Demo](https://repl.it/@MiKLTea/TkThreadResumeDemo)
9
+ [Demo](https://repl.it/@MiKLTea/TkThreadResumeDemo)
10
+
11
+ ----
12
+ 追記: エラーの原因
13
+
14
+ 「RuntimeError: threads can only be started once」
15
+ と書かれているように、スレッドの誤用です。
16
+
17
+ [スレッドベースの並列処理](https://docs.python.org/ja/3/library/threading.html)
18
+ > start() このメソッドは、スレッドオブジェクトあたり一度しか呼び出してはなりません。

1

「一旦止める」→処理を再開をしたい場合は、future.cancel()は適切でなかったので削除

2020/07/04 21:23

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -2,7 +2,6 @@
2
2
  スレッド自体は一旦止めるという名操作を出来ないので、
3
3
  自身で関数をそのように実装する必要があります。
4
4
 
5
- - concurrentモジュールであれば、Futureオブジェクトのcancel()
6
5
  - 通常のスレッド内の「ループ処理」であれば、threading.Event が使えます
7
6
  y_waiwai さんの仰られてるフラグの仕組みに該当する部分です。
8
7