码迷,mamicode.com
首页 > 编程语言 > 详细

Python 多线程

时间:2019-10-03 12:59:41      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:lis   span   set   time   class   结果   rgs   单元   start   

多线程

平时简单写在一个文件(视为一个进程)里的代码, 都是(像看书一样)按顺序在主线程中执行。线程是程序执行的最小单元, 通过模块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 多线程

标签:lis   span   set   time   class   结果   rgs   单元   start   

原文地址:https://www.cnblogs.com/noah227/p/11579425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!