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 多线程的主要内容,如果未能解决你的问题,请参考以下文章