多进程(1)
1 # 概念 2 # 进程是程序在计算机上的一次执行活动。 3 # 当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。 4 # 进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身; 5 # 用户进程就不必我多讲了吧,所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。 6 # 它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒), 7 # 这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。 8 # 9 # 多进程和多线程的区别: 10 # 多线程使用的是cpu的一个核,适合io密集型 11 # 多进程使用的是cpu的多个核,适合运算密集型 12 # 组件 13 # Python提供了非常好用的多进程包,multiprocessing,我们在使用的时候,只需要导入该模块就可以了。 14 # Multiprocessing支持子进程,通信,共享数据,执行不同形式的同步,提供了Process,Pipe, Lock等组件 15 # 多进程和多线程的区别: 16 # 多线程使用的是cpu的一个核,适合io密集型 17 # 多进程使用的是cpu的多个核,适合运算密集型 18 # 组件 19 # Python提供了非常好用的多进程包,multiprocessing,我们在使用的时候,只需要导入该模块就可以了。 20 # Multiprocessing支持子进程,通信,共享数据,执行不同形式的同步,提供了Process,Pipe, Lock等组件 21 # 22 # 23 # 创建进程的类 24 # Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动) 25 # 26 # 参数介绍 27 # group参数未使用,值始终为None 28 # target表示调用对象,即子进程要执行的任务 29 # args表示调用对象的位置参数元组,args=(1,2,'egon',) 30 # kwargs表示调用对象的字典,kwargs={'name':'egon','age':18} 31 # name为子进程的名称 32 # 33 # 方法介绍 34 # p.start():启动进程,并调用该子进程中的p.run() 35 # p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法 36 # p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。 37 # 如果p还保存了一个锁那么也将不会被释放,进而导致死锁 38 # p.is_alive():如果p仍然运行,返回True 39 # p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。 40 # timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程 41 # 42 # 43 # 进程属性 44 # p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时, 45 # p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置 46 # p.name:进程的名称 47 # p.pid:进程的pid 48 49 import multiprocessing 50 import time 51 52 def work(interval, method): 53 print("start work_" + method) 54 time.sleep(interval) 55 print("end work_" + method) 56 if __name__ == "__main__": 57 p1 = multiprocessing.Process(target=work, args=(1, "1")) 58 p2 = multiprocessing.Process(target=work, args=(2, "2")) 59 p3 = multiprocessing.Process(target=work, args=(3, "3")) 60 61 p1.start() 62 p2.start() 63 p3.start() 64 print("The number of CPU is:") + str(multiprocessing.cpu_count()) 65 for p in multiprocessing.active_children(): 66 print("The name of active child is: " + p.name + ", pid is: " + str(p.pid) + "is alive: " + str(p.is_alive())) 67 print("MAIN IS END!") 68