回答編集履歴

3

追記2 ライブラリ側でのタイムアウト対応について

2021/05/17 02:05

投稿

teamikl
teamikl

スコア8681

test CHANGED
@@ -146,6 +146,30 @@
146
146
 
147
147
 
148
148
 
149
+
150
+
151
+ 追記2:
152
+
153
+ 質問のコードには書かれてませんが、
154
+
155
+ スクレイプという事なので、requests 等のライブラリをお使いでしょうか?
156
+
157
+ もし、ライブラリ側で対応しているなら、そちらの ​timeout オプションの利用が適してます。
158
+
159
+
160
+
161
+ thread.join(timeout=3) は、スケジュールのループを3秒間ブロックするので、
162
+
163
+ 秒単位のスケジュールがある場合、3秒遅延になります。
164
+
165
+
166
+
167
+ ライブラリ側でのタイムアウトであれば、(質問のコードの構成の場合)別スレッドなので、
168
+
169
+ メインスレッドのスケジュールのループに影響ありません。
170
+
171
+
172
+
149
173
  ----
150
174
 
151
175
  concurrency モジュールに言及しておくと、

2

デーモン化したスレッドについて補足

2021/05/17 02:04

投稿

teamikl
teamikl

スコア8681

test CHANGED
@@ -165,3 +165,27 @@
165
165
   実行中の処理の中断という用途には近いかもしれません。
166
166
 
167
167
   asyncio対応ライブラリであれば、I/O処理待ちのタイミングでの中断が可能です。
168
+
169
+
170
+
171
+ ----
172
+
173
+ 追記
174
+
175
+
176
+
177
+ > scheduleを使用するとデーモン化しても裏でまだスレッドが普通に生きてます。
178
+
179
+
180
+
181
+ ここも恐らく誤解だと思います、
182
+
183
+ どのようにスレッドの生存を確認したのでしょうか。
184
+
185
+
186
+
187
+ schedule の利用の有無に関わらず、デーモンスレッドが破棄されるのは、
188
+
189
+ 「デーモンでない生存中のスレッドが全てなくなる」タイミングなので、
190
+
191
+ メインスレッドが終了した後です。

1

文章の修正

2021/05/16 10:04

投稿

teamikl
teamikl

スコア8681

test CHANGED
@@ -114,11 +114,15 @@
114
114
 
115
115
 
116
116
 
117
- 回答としては、まずはスレッド行う処理中に、
117
+ 回答としては、まずはスレッド行う処理中に、
118
118
 
119
119
  解放が必要なリソースがあるかどうか確認したうえで、
120
120
 
121
+
122
+
123
+ スレッド内で行う処理は、後処理が確実に実行されるように、
124
+
121
- スレッド内で行う処理は、安全に中断可能な設計にする必要があります。
125
+ 安全に中断可能な設計にする必要があります。
122
126
 
123
127
 
124
128