Python 多线程

Posted noah227

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 多线程相关的知识,希望对你有一定的参考价值。

多线程

平时简单写在一个文件(视为一个进程)里的代码, 都是(像看书一样)按顺序在主线程中执行。线程是程序执行的最小单元, 通过模块threading可以创建线程。

多线程本质是一种IO多次切换的计算操作, 故其适用于IO密集型操作。

如下是个简单的例子:

 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 # 实现了并发的效果, 并且可以看出, 主线程开了之后, 主线程、子线程各自执行直至程序执行结束。 其实, 在子线程结束前,主线程依旧存在

多线程之join方法

wait until the joined thread terminates

 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

多线程之setDaemon (守护线程)

当线程被设置为守护线程后, 非守护线程结束时, 不管此线程有没有执行完毕, 都立即结束。

 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 

 

以上是关于Python 多线程的主要内容,如果未能解决你的问题,请参考以下文章

python多线程作用

python 多线程

Python多线程总结

python 多线程状态

python3.7多线程代码不执行?

python循环怎么用多线程去运行