【 在 giantman 的大作中提到: 】
: 开始学习python中的多线程,可是我发现按照书上的例子,将子线程的daemon无论设成True还是False,结果都一样,子线程都不能随主线程的结束而结束,而且每次运行,结果都不完全一样,不知道是怎么回事?
: 程序如下:
: import threading
: ...................
我用 Python 3.7.3 在 Mac 平台下的 PyCharm IDE 中测试,结果完全符合预期. 可能你的Python环境有问题。
代码:
```
import sys
import threading
import time
print(f'\nPython version: {sys.version}\n', end='', flush=True)
def reading(msg: str):
count = 3
for i in range(count):
print(f'{msg}: reading {i+1}/{count}\n', end='', flush=True)
time.sleep(1)
def test(thread_count: int, is_daemon: bool) -> None:
print(f'\n-------- setDaemon({is_daemon}) --------\n', end='', flush=True)
for index in range(thread_count):
r = threading.Thread(target=reading, args=[f'Thread {index+1}'])
r.setDaemon(is_daemon)
r.start()
print('Main thread: The End\n', end='', flush=True)
test(5, True)
```
运行结果:
```
/Users/abc/project/pythonProject/test/venv/bin/python /Users/abc/project/pythonProject/test/my_daemon.py
Python version: 3.7.3 (default, Apr 24 2020, 18:51:23)
[Clang 11.0.3 (clang-1103.0.32.62)]
-------- setDaemon(True) --------
Thread 1: reading 1/3
Thread 2: reading 1/3
Thread 3: reading 1/3
Thread 4: reading 1/3
Thread 5: reading 1/3
Main thread: The End
Process finished with exit code 0
```
代码最后一行改为 `test(5, False)` 后,运行结果:
```
/Users/abc/project/pythonProject/test/venv/bin/python /Users/abc/project/pythonProject/test/my_daemon.py
Python version: 3.7.3 (default, Apr 24 2020, 18:51:23)
[Clang 11.0.3 (clang-1103.0.32.62)]
-------- setDaemon(False) --------
Thread 1: reading 1/3
Thread 2: reading 1/3
Thread 3: reading 1/3
Thread 4: reading 1/3
Thread 5: reading 1/3
Main thread: The End
Thread 1: reading 2/3
Thread 2: reading 2/3
Thread 5: reading 2/3
Thread 4: reading 2/3
Thread 3: reading 2/3
Thread 2: reading 3/3
Thread 5: reading 3/3
Thread 1: reading 3/3
Thread 3: reading 3/3
Thread 4: reading 3/3
Process finished with exit code 0
```
--
修改:galaxy123 FROM 74.88.40.*
FROM 74.88.40.*