Python 多线程
2020-12-13 16:23
标签:lis span set time class 结果 rgs 单元 start 平时简单写在一个文件(视为一个进程)里的代码, 都是(像看书一样)按顺序在主线程中执行。线程是程序执行的最小单元, 通过模块threading可以创建线程。 多线程本质是一种IO多次切换的计算操作, 故其适用于IO密集型操作。 如下是个简单的例子: 多线程之join方法 wait until the joined thread terminates 多线程之setDaemon (守护线程) 当线程被设置为守护线程后, 非守护线程结束时, 不管此线程有没有执行完毕, 都立即结束。 Python 多线程 标签:lis span set time class 结果 rgs 单元 start 原文地址:https://www.cnblogs.com/noah227/p/11579425.html多线程
1 import threading # 封装了thread模块
2 import time
3
4
5 def foo(k):
6 time.sleep(1)
7 print("%s now running : %s" % (k, threading.current_thread().name))
8
9
10 if __name__ == "__main__":
11 print("now running: ", threading.current_thread().name)
12 thread_list = [] # 这里我们创建一个列表用于存放创建的子线程对象
13 for i in range(5):
14 t = threading.Thread(target=foo, args=(i, )) # 创建线程对象t
15 thread_list.append(t)
16
17 for t in thread_list:
18 t.start()
19
20
21 # 第一次执行:
22 # now running: MainThread
23 # main thread end ! time used: 0.001002 # 主线程耗时极短
24 # 1 now running : Thread-2
25 # 2 now running : Thread-3
26 # 0 now running : Thread-1
27 # 4 now running : Thread-5
28 # 3 now running : Thread-4
29
30 # 第二次执行:
31 # now running: MainThread
32 # main thread end ! time used: 0.001970
33 # 1 now running : Thread-2
34 # 0 now running : Thread-1
35 # 4 now running : Thread-5
36 # 3 now running : Thread-4
37 # 2 now running : Thread-3
38 # 实现了并发的效果, 并且可以看出, 主线程开了之后, 主线程、子线程各自执行直至程序执行结束。 其实, 在子线程结束前,主线程依旧存在。 1 # 现对线程的执行部分(以上17-18行)做个修改
2 for t in thread_list:
3 t.start()
4 t.join() # join后所join的线程执行完才能执行下一个线程
5
6 # 加入join后,执行结果
7 # now running: MainThread
8 # 0 now running : Thread-1
9 # 1 now running : Thread-2
10 # 2 now running : Thread-3
11 # 3 now running : Thread-4
12 # 4 now running : Thread-5
13 # main thread end ! time used: 5.004852
1 import threading
2 import time
3
4
5 def foo():
6 time.sleep(1)
7 print("now running : %s" % threading.current_thread().name)
8
9
10 if __name__ == "__main__":
11 print("now running: ", threading.current_thread().name)
12 start = time.time()
13 t = threading.Thread(target=foo))
14 # t.setDaemon(True)
15 t.start()
16 end = time.time()
17 print("main thread end ! \t time used: %f" % (end - start))
18
19 # 以下为输出结果:
20
21 # now running: MainThread
22 # main thread end ! time used: 0.000974
23 # 1 now running : Thread-1
24
25
26 # t.setDaemon(True)执行后:
27
28 # now running: MainThread
29 # main thread end ! time used: 0.001004
30 # 线程t未完全执行
31