欢迎光临
我们一直在努力

python 多线程 Python多线程的join()一用,主线程秒变‘等死鬼’,你敢不设?

多线程与多进程中join()方法的效果是相同的。

下面仅以多线程为例:

首先需要明确几个概念:

知识点一:

当进程启动起来后, 默认会产生出一个主线程, 因为线程乃是程序执行流里的最小单元, 只要设置了多线程, 主线程就会去创建多个子线程, 在其中, 默认的情形下(实际上也就是(False)这个状态), 主线程执行完自身的任务之后, 就退出了, 在这个时候,子线程会持续执行自己的任务, 一直到自身的任务终结, 事例见于下面一。

知识点二:

倘若我们运用(True)方式, 去设定子线程为守护线程, 那么一旦主线程完结执行, 所有线程都会被终止运行, 其可能状况是, 在子线程的任务尚未完全执行完毕之际, 就会被迫停下, 相关例子见于下述二。

知识点三:

就在这时候, join的作用开始显著地显现出来了, join所达成的工作便是线程同步, 意思乃是主线程任务完结之后, 进入被阻塞的状态, 始终等待其余的子线程执行完毕之后, 主线程再停止, 例子情况可见下面的第三个。

知识点四:

join有一个参数:

当进行守护线程设置之际, 其含义之为主线程针对子线程等待的时长将会致使该子线程被杀死, 最终程序退出。故而讲, 若存在10个子线程, 全部的等待时间便是每个子线程等待时间的累加总和。简要而言, 就是给予每个子线程一段特定的时间, 使其去执行任务, 时间期满, 不管任务是否完成, 都直接将其杀死。在未设置守护线程之时, 主线程将会等待一段如各子线程等待时间累加和这般的时长, 时间一到, 主线程结束, 然而并未杀死子线程, 子线程依旧能够继续执行, 直至子线程全部完结, 程序才推出。一:多线程的默认情况

import threading
import time
def run():
time.sleep(2)
print('当前线程的名字是: ', threading.current_thread().name)
time.sleep(2)
if __name__ == '__main__':
start_time = time.time()
print('这是主线程:', threading.current_thread().name)
thread_list = []
for i in range(5):
t = threading.Thread(target=run)
thread_list.append(t)
for t in thread_list:
t.start()
print('主线程结束!' , threading.current_thread().name)
print('一共用时:', time.time()-start_time)

其执行结果如下

关键点:

我们所进行的计时操作是针对主线程实施计时的, 而当主线程结束的时候, 计时也就跟着结束, 然后会打印出主线程所花费的时间。在主线程的任务完成之后, 主线程就紧接着结束, 这时子线程会继续去执行它自己的任务, 一直到所有子线程的任务全都完成, 程序这才结束。二: 要进行设置守护线程。

import threading
import time
def run():
time.sleep(2)
print('当前线程的名字是: ', threading.current_thread().name)
time.sleep(2)
if __name__ == '__main__':
start_time = time.time()
print('这是主线程:', threading.current_thread().name)
thread_list = []
for i in range(5):
t = threading.Thread(target=run)
thread_list.append(t)
for t in thread_list:
t.setDaemon(True)
t.start()
print('主线程结束了!' , threading.current_thread().name)
print('一共用时:', time.time()-start_time)

其执行结果如下,注意请确保()在start()之前。

Python多进程join方法_python 多线程_Python多线程join方法

关键点:

能极其清晰地察觉到, 当主线程终结之后, 子线程根本就没来得及去执行, 紧接着整个程序便宣告退出了。三: join所具备的作用。

import threading
import time
def run():
time.sleep(2)
print('当前线程的名字是: ', threading.current_thread().name)
time.sleep(2)
if __name__ == '__main__':
start_time = time.time()
print('这是主线程:', threading.current_thread().name)
thread_list = []
for i in range(5):
t = threading.Thread(target=run)
thread_list.append(t)
for t in thread_list:
t.setDaemon(True)
t.start()
for t in thread_list:
t.join()
print('主线程结束了!' , threading.current_thread().name)
print('一共用时:', time.time()-start_time)

其执行结果如下:

python 多线程_Python多线程join方法_Python多进程join方法

关键点:

能够观察到, 主线程持续等待着, 一直到全部的子线程都结束了, 之后主线程自身才终止, 程序进而退出。9D7E.MiNgChEn.PRo
254.MiNgChEn.PRo
BB5A.MiNgChEn.PRo
E7ED.MiNgChEn.PRo
EFA3.MiNgChEn.PRo
61C5.MiNgChEn.PRo
F327.MiNgChEn.PRo
E48B.MiNgChEn.PRo
7C3.MiNgChEn.PRo
6B3.MiNgChEn.PRo
EC5.MiNgChEn.PRo
93.MiNgChEn.PRo
DD.MiNgChEn.PRo
68.MiNgChEn.PRo
32D.MiNgChEn.PRo
2EDE.MiNgChEn.PRo
97.MiNgChEn.PRo
080.MiNgChEn.PRo
C5.MiNgChEn.PRo
90A1.MiNgChEn.PRo
A9.MiNgChEn.PRo
5854.MiNgChEn.PRo
F5.MiNgChEn.PRo
847.MiNgChEn.PRo
59B.MiNgChEn.PRo
670.MiNgChEn.PRo
FA9.MiNgChEn.PRo
15.MiNgChEn.PRo
EF7.MiNgChEn.PRo
53AB.MiNgChEn.PRo
57.MiNgChEn.PRo
6B.MiNgChEn.PRo
33C0.MiNgChEn.PRo
960.MiNgChEn.PRo
117.MiNgChEn.PRo
EC39.MiNgChEn.PRo
2D9.MiNgChEn.PRo
13.MiNgChEn.PRo
1C5D.MiNgChEn.PRo
14F3.MiNgChEn.PRo
3B2.MiNgChEn.PRo
9EF.MiNgChEn.PRo
0AC.MiNgChEn.PRo
05D.MiNgChEn.PRo
AAD.MiNgChEn.PRo
4245.MiNgChEn.PRo
749.MiNgChEn.PRo
540.MiNgChEn.PRo
ACF7.MiNgChEn.PRo
9002.MiNgChEn.PRo
77.MiNgChEn.PRo
C9.MiNgChEn.PRo
07B.MiNgChEn.PRo
F3BA.MiNgChEn.PRo
CE7.MiNgChEn.PRo
6F91.MiNgChEn.PRo
DC5.MiNgChEn.PRo
54.MiNgChEn.PRo
29.MiNgChEn.PRo
88F9.MiNgChEn.PRo
7B6C.MiNgChEn.PRo
EB48.MiNgChEn.PRo
A.MiNgChEn.PRo
96.MiNgChEn.PRo
08F.MiNgChEn.PRo
DBA6.MiNgChEn.PRo
AFAD.MiNgChEn.PRo
07.MiNgChEn.PRo
A9D.MiNgChEn.PRo
FB05.MiNgChEn.PRo
2C0.MiNgChEn.PRo
E32.MiNgChEn.PRo
D5.MiNgChEn.PRo
2C.MiNgChEn.PRo
E2.MiNgChEn.PRo
C390.MiNgChEn.PRo
B80E.MiNgChEn.PRo
06.MiNgChEn.PRo
1956.MiNgChEn.PRo
94.MiNgChEn.PRo
8DF1.MiNgChEn.PRo
B0F.MiNgChEn.PRo
F7A4.MiNgChEn.PRo
71.MiNgChEn.PRo
8F2A.MiNgChEn.PRo
F4.MiNgChEn.PRo
09A6.MiNgChEn.PRo
A9F.MiNgChEn.PRo
90A.MiNgChEn.PRo
318.MiNgChEn.PRo
F99.MiNgChEn.PRo
F8.MiNgChEn.PRo
393.MiNgChEn.PRo
8188.MiNgChEn.PRo
F577.MiNgChEn.PRo
B2.MiNgChEn.PRo
AC1.MiNgChEn.PRo
5B.MiNgChEn.PRo
3A8.MiNgChEn.PRo
2914.MiNgChEn.PRo
4C.MiNgChEn.PRo
99.MiNgChEn.PRo
84C.MiNgChEn.PRo
1B11.MiNgChEn.PRo
19.MiNgChEn.PRo
CD.MiNgChEn.PRo
CAE.MiNgChEn.PRo
87.MiNgChEn.PRo
AE2.MiNgChEn.PRo
CFF.MiNgChEn.PRo
0A07.MiNgChEn.PRo
997.MiNgChEn.PRo
58.MiNgChEn.PRo
C3AB.MiNgChEn.PRo
2E93.MiNgChEn.PRo
F7D.MiNgChEn.PRo
8D8.MiNgChEn.PRo
6EA.MiNgChEn.PRo
D6.MiNgChEn.PRo
21D8.MiNgChEn.PRo
BD77.MiNgChEn.PRo
1E34.MiNgChEn.PRo
2BE.MiNgChEn.PRo
6.MiNgChEn.PRo
FC.MiNgChEn.PRo
17.MiNgChEn.PRo
963.MiNgChEn.PRo
F2.MiNgChEn.PRo
8B3.MiNgChEn.PRo
E047.MiNgChEn.PRo
A4.MiNgChEn.PRo
B.MiNgChEn.PRo
34F6.MiNgChEn.PRo
67B.MiNgChEn.PRo
FD9.MiNgChEn.PRo
BD1D.MiNgChEn.PRo
A9FE.MiNgChEn.PRo
38E5.MiNgChEn.PRo
6BE.MiNgChEn.PRo
438.MiNgChEn.PRo
65DA.MiNgChEn.PRo
B3F.MiNgChEn.PRo
521.MiNgChEn.PRo
26AE.MiNgChEn.PRo
5946.MiNgChEn.PRo
BB.MiNgChEn.PRo
E3A3.MiNgChEn.PRo
74E9.MiNgChEn.PRo
B384.MiNgChEn.PRo
36CE.MiNgChEn.PRo
45CC.MiNgChEn.PRo
ABA.MiNgChEn.PRo
250C.MiNgChEn.PRo
FDD.MiNgChEn.PRo
508.MiNgChEn.PRo
307E.MiNgChEn.PRo
BBA3.MiNgChEn.PRo
613.MiNgChEn.PRo
818.MiNgChEn.PRo
7AE5.MiNgChEn.PRo
880.MiNgChEn.PRo
EDEF.MiNgChEn.PRo
C4CE.MiNgChEn.PRo
0C.MiNgChEn.PRo
4A3F.MiNgChEn.PRo
0356.MiNgChEn.PRo
8F36.MiNgChEn.PRo
9E.MiNgChEn.PRo
3BD.MiNgChEn.PRo
655C.MiNgChEn.PRo
FB27.MiNgChEn.PRo
7E5.MiNgChEn.PRo

赞(0)
未经允许不得转载:171主机测评 » python 多线程 Python多线程的join()一用,主线程秒变‘等死鬼’,你敢不设?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址