Skip to content

Commit 5444d5c

Browse files
authored
Merge pull request #2 from akincan-kilic/patch-1
Daemon Thread question -akin
2 parents 22ac4c4 + e30d09e commit 5444d5c

File tree

1 file changed

+156
-0
lines changed

1 file changed

+156
-0
lines changed

Week08/midterm/from_akin.md

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
```python
2+
3+
import threading
4+
from time import sleep
5+
import logging
6+
7+
logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s')
8+
9+
def print_range(start_num, end_num) -> None:
10+
for i in range(start_num, end_num):
11+
if threading.current_thread().daemon:
12+
# This daemon thread should monitor if all the threads running this are finished
13+
logging.info(f"Current active threads: {threading.active_count()}")
14+
if threading.active_count() == 1:
15+
logging.info('All threads finished.')
16+
break
17+
sleep(1)
18+
else:
19+
logging.info(i)
20+
sleep(0.2)
21+
22+
t1 = threading.Thread(target=print_range, args=(1, 10))
23+
t2 = threading.Thread(target=print_range, args=(-10, 0))
24+
t3 = threading.Thread(target=print_range, args=(0, 1000), daemon=True)
25+
26+
27+
t1.start()
28+
t2.start()
29+
t3.start()
30+
31+
t1.join()
32+
t2.join()
33+
t3.join()
34+
35+
if not t1.is_alive() and not t2.is_alive():
36+
print('Finished')
37+
```
38+
39+
# Which one of the answers below is a possible output of the Python code above?
40+
41+
42+
# a)
43+
```
44+
Thread-1 (print_range): 1
45+
Thread-2 (print_range): -10
46+
Thread-3 (print_range): Current active threads: 4
47+
Thread-2 (print_range): -9
48+
Thread-1 (print_range): 2
49+
Thread-2 (print_range): -8
50+
Thread-1 (print_range): 3
51+
Thread-2 (print_range): -7
52+
Thread-1 (print_range): 4
53+
Thread-2 (print_range): -6
54+
Thread-1 (print_range): 5
55+
Thread-3 (print_range): Current active threads: 4
56+
Thread-1 (print_range): 6
57+
Thread-2 (print_range): -5
58+
Thread-1 (print_range): 7
59+
Thread-2 (print_range): -4
60+
Thread-1 (print_range): 8
61+
Thread-2 (print_range): -3
62+
Thread-2 (print_range): -2
63+
Thread-1 (print_range): 9
64+
Thread-2 (print_range): -1
65+
Thread-3 (print_range): Current active threads: 3
66+
Thread-3 (print_range): Current active threads: 2
67+
...
68+
...995 more lines of (Thread-3 (print_range): Current active threads: 2)
69+
...
70+
Thread-3 (print_range): Current active threads: 2
71+
Finished
72+
```
73+
74+
# b)
75+
```
76+
Thread-1 (print_range): 1
77+
Thread-2 (print_range): -10
78+
Thread-3 (print_range): Current active threads: 3
79+
Thread-1 (print_range): 2
80+
Thread-2 (print_range): -9
81+
Thread-1 (print_range): 3
82+
Thread-2 (print_range): -8
83+
Thread-1 (print_range): 4
84+
Thread-2 (print_range): -7
85+
Thread-1 (print_range): 5
86+
Thread-2 (print_range): -6
87+
Thread-3 (print_range): Current active threads: 3
88+
Thread-1 (print_range): 6
89+
Thread-2 (print_range): -5
90+
Thread-1 (print_range): 7
91+
Thread-2 (print_range): -4
92+
Thread-1 (print_range): 8
93+
Thread-2 (print_range): -3
94+
Thread-1 (print_range): 9
95+
Thread-2 (print_range): -2
96+
Thread-2 (print_range): -1
97+
Thread-3 (print_range): All threads finished.
98+
Finished
99+
```
100+
101+
# c)
102+
```
103+
Thread-2 (print_range): -10
104+
Thread-1 (print_range): 1
105+
Thread-3 (print_range): Current active threads: 3
106+
Thread-2 (print_range): -9
107+
Thread-2 (print_range): -8
108+
Thread-1 (print_range): 2
109+
Thread-1 (print_range): 3
110+
Thread-1 (print_range): 4
111+
Thread-1 (print_range): 5
112+
Thread-2 (print_range): -7
113+
Thread-2 (print_range): -6
114+
Thread-1 (print_range): 6
115+
Thread-2 (print_range): -5
116+
Thread-2 (print_range): -4
117+
Thread-2 (print_range): -3
118+
Thread-2 (print_range): -2
119+
Thread-2 (print_range): -1
120+
Thread-3 (print_range): Current active threads: 2
121+
Thread-1 (print_range): 7
122+
Thread-1 (print_range): 8
123+
Thread-1 (print_range): 9
124+
Thread-3 (print_range): Current active threads: 1
125+
Thread-3 (print_range): All threads finished.
126+
Finished
127+
```
128+
129+
# d)
130+
```
131+
Thread-2 (print_range): -10
132+
Thread-1 (print_range): 1
133+
Thread-3 (print_range): Current active threads: 4
134+
Thread-2 (print_range): -9
135+
Thread-2 (print_range): -8
136+
Thread-1 (print_range): 2
137+
Thread-1 (print_range): 3
138+
Thread-1 (print_range): 4
139+
Thread-1 (print_range): 5
140+
Thread-2 (print_range): -7
141+
Thread-2 (print_range): -6
142+
Thread-1 (print_range): 6
143+
Thread-3 (print_range): Current active threads: 4
144+
Thread-2 (print_range): -5
145+
Thread-2 (print_range): -4
146+
Thread-2 (print_range): -3
147+
Thread-2 (print_range): -2
148+
Thread-2 (print_range): -1
149+
Thread-1 (print_range): 7
150+
Thread-1 (print_range): 8
151+
Thread-1 (print_range): 9
152+
Finished
153+
```
154+
155+
# e)
156+
```None of the above```

0 commit comments

Comments
 (0)