threading多线程模块

操作系统:(承上启下作用,起到硬件与应用程序之间的连接作用(或者接口作用))


进程:本质上是一段程序运行的过程,是一个抽象的概念。
进程的目的就是切换,也就是程序A与程序B矛盾时,可以切换执行,提高CPU的效率。

进程包括三部分:程序,数据集,程序控制块三个部分。
程序是一个实体,进程是一个抽象。数据集相当于输入。程序控制块用于切换时,记录上一个进程执行到哪等信息。
说道切换,可以是一个进程遇到IO操作的时候,执行切换(因为IO时,CPU空闲);也可以根据时间序列切换等等。

如果只有一个CPU,进程切换只是实现并发(感觉看起来一起执行,比如既可以上网,也可以听歌,实际上不是同时执行),
并行至少需要多核(多个cpu).这样假如两个CPU同时对应4个任务,这样就既有并行也有并发。


线程:有了进程后,可以实现一边玩游戏一边听音乐了。假设一个文本程序,当键盘输入的同时,需要屏幕显示,并且同时刻录到磁盘中。
如果只是用一个进程的话,只能安顺序执行,也就是说键盘输入的同时,屏幕上是看不到的,要等输入完。
因此需要多进程,但是一个程序就这样分了,搞得跟多个程序似的,并且多进程切换过程会降低效率。

线程其实可以理解为一个进程中微进程,它共享一个进程中的资源集,线程的切换也比进程的切换省事。比如扣扣,既可以一边聊天,
又可以一边接收邮箱信息。它们共享一个用户的信息,状态什么的。


进程与线程区别:
1.一个程序至少有一个进程,一个进程至少有一个线程。(进程可以理解成线程的容器)

2.进程在执行过程中拥有独立的内存单元,而多个线程共享(一个进程)内存,从而极大地提高了程序的运行效率

3.线程是最小的执行单元,进程是最小的资源单位(操作系统分资源最小分发进程)。线程不可能脱离进程独立存在
等等

下面看两个简单的多线程例子:
 1 import threading
 2 import time
 3 
 4 def music():
 5     print("begin to listen %s"%time.ctime())
 6     time.sleep(3)
 7     print("stop listening %s" % time.ctime())
 8 
 9 def game():
10     print("begin to game %s"%time.ctime())
11     time.sleep(5)
12     print("stop gaming %s" % time.ctime())
13 
14 
15 if __name__ == '__main__':
16 
17     t1 = threading.Thread(target=music)
18 
19     t2 = threading.Thread(target=game)
20 
21     t1.start()       # 与lesson2放在上面是一样的
22     t2.start()
23 
24     t1.join()        # join这个方法是子线程对象调用的函数,函数的意思是t1这个子线等待结束后,主线程才能走
25     # t2.join()
26 
27     # 与join对应的.setDaemon是守护线程,比如T1设置为守护线程,
28     # 意思就是t1这个线程跟主线程一起退,主线程结束后,它问一下其他非守护线程,其他的非守护线程也都结束,它结束
29 
30     print("ending............")
View Code
 1 '''
 2 线程,threading可以开线程,里面实例对象有几个重要的方法,比如:.start,.join,.setDaemon
 3 t = threading.Thread()
 4 以上是t的方法(实例化的属性)
 5 另外threading模块还有一些方法:
 6 threading.currentThread()      返回当前的线程变量
 7 threading.enumerate()           返回一个包含正在运行的线程的list.正在运行指线程启动后,结束前。
 8 threading.activeCount()         返回正在运行的线程数量,与len(threading.enumerate())有相同的结果
 9 '''
10 
11 import threading  # 线程
12 import time
13 
14 
15 def Hi(num, i):
16     print("hello %s" % num)
17     time.sleep(int(i))
18 
19 
20 if __name__ == '__main__':
21 
22     # 主线程下面开了两个子线程
23 
24     t1 = threading.Thread(target=Hi, args=(10,2))  # 实例化一个线程对象,开一个子线程1
25     t1.start()
26 
27     t2 = threading.Thread(target=Hi, args=(9,7))  # 实例化一个线程对象,开一个子线程2
28     t2.start()
29 
30     print("ending.................")
View Code

猜你喜欢

转载自www.cnblogs.com/maxiaonong/p/9500372.html