回答編集履歴

4

コード修正

2020/06/24 02:45

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -1,6 +1,6 @@
1
1
  たとえば、下記コードで、下から2行目をwait=Trueとすると、すべてのタスクが終了してから、「すべてのタスクが完了しました」と表示されますが、
2
2
 
3
- wait=Falseに変えると、「すべてのタスクが完了しました」と表示されてから「タスク#{num} が完了しました.」が順次表示されます。
3
+ wait=Falseに変えると、先に「すべてのタスクが完了しました」と表示されてから「タスク#{num} が完了しました.」が順次表示されます。
4
4
 
5
5
 
6
6
 
@@ -16,13 +16,11 @@
16
16
 
17
17
  ```
18
18
 
19
- from concurrent.futures import ThreadPoolExecutor, as_completed
19
+ from concurrent.futures import ThreadPoolExecutor
20
20
 
21
21
  import time
22
22
 
23
23
  from datetime import datetime
24
-
25
- import random
26
24
 
27
25
  th = ThreadPoolExecutor(max_workers=5)
28
26
 

3

修正

2020/06/24 02:45

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -1,6 +1,6 @@
1
- たとえば、下記コードで、下から2行目をwait=Trueとすると、すべてのタスクが終了してから、「all finished表示されますが、
1
+ たとえば、下記コードで、下から2行目をwait=Trueとすると、すべてのタスクが終了してから、「すべてのタスクが完了しました表示されますが、
2
2
 
3
- wait=Falseに変えると、「all finished表示されてから「task #{num} finished」が順次表示されます。
3
+ wait=Falseに変えると、「すべてのタスクが完了しました表示されてから「タスク#{num} が完了しました.」が順次表示されます。
4
4
 
5
5
 
6
6
 

2

コード修正

2020/06/24 02:44

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -38,21 +38,19 @@
38
38
 
39
39
  interval = num*2
40
40
 
41
- print_with_time(f"task #{num}: set interval= {interval}")
41
+ print_with_time(f"タスク#{num}: 完了まで {interval}")
42
42
 
43
43
  time.sleep(interval)
44
44
 
45
- print_with_time(f"task #{num} finished.")
45
+ print_with_time(f"タスク#{num} が完了しました.")
46
+
47
+
46
48
 
47
49
 
48
50
 
49
-
50
-
51
- futures = []
52
-
53
51
  for i in range (5):
54
52
 
55
- futures.append(th.submit(task, i+1))
53
+ th.submit(task, i+1)
56
54
 
57
55
 
58
56
 
@@ -60,7 +58,7 @@
60
58
 
61
59
 
62
60
 
63
- print_with_time("all finished")
61
+ print_with_time("<<<すべてのタスクが完了しました>>>")
64
62
 
65
63
 
66
64
 

1

f

2020/06/24 02:42

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -6,9 +6,11 @@
6
6
 
7
7
 
8
8
 
9
- wait=Trueにすると、submitしたすべてのタスクが完了するまでsubmit元のスレッドでは何も処理できません。これは不便と思うかもしれませんが、submitしたすべてのタスクが共通のリソースを扱っている場合等、プログラムを安全に操作する場合には必要になることもあります。
9
+ wait=Trueにすると、shutdown()関数でいったん止まり、submitしたすべてのタスクが完了するまでsubmit元のスレッドでは処理が進みません。
10
10
 
11
+ 一方、wait=Falseにすると、submitしたタスクの完了状態に関係なく、shutdown()関数からすぐに戻り、submit元のスレッドで処理を継続することができます。
11
12
 
13
+ (使い分けはどのようなプログラムにしたいかによります)
12
14
 
13
15
 
14
16