1、多进程 与 多线程 的概念html
一、进程的概念python
进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。多线程
进程能够分为系统进程和用户进程。凡是用于完成操做系统的各类功能的进程就是系统进程,它们就是处于运行状态下的操做系统自己;函数
全部由你启动的进程都是用户进程。进程是操做系统进行资源分配的单位。spa
二、示例操作系统
PID 即进程ID(每一个进程有惟一的PID号) 线程
PPID 即父进程IDorm
三、进程 与 线程 的区别htm
进程:每一个正在系统上运行的程序都是一个进程。每一个进程包含一到多个线程。进程也多是整个程序或者是部分程序的动态执行。对象
线程:线程是一组指令的集合,或者是程序的特殊段,它能够在程序里独立执行。
四、多进程 与 多线程 的区别
多线程使用的是cpu的一个核,适合io密集型
多进程使用的是cpu的多个核,适合运算密集型
五、Python 的多进程模块 (须要 import 导入该模块便可)
该模块支持子进程、通讯、共享数据、执行不一样形式的同步,提供了Process,Pipe, Lock等组件
import multiprocessing
2、多进程的相关操做
一、建立多进程
格式为 p = multiprocessing.Process(target=worker_1, args=(2, ))
其中:target 指定的是当进程执行时,须要执行的函数
args 当进程执行时,须要给函数传入的参数;args 必须是一个tuple,特别是当函数须要传输一个参数时,即 单个元素的元组表示方法 (1,)
p 表明的是一个多进程。
二、多进程的经常使用操做
p.is_alive() 判断进程是否存活,返回布尔值
p.run() 启动进程
p.start() 启动进程,会自动调用 run 方法,推荐使用该方法。
p.join(timeout) 等待子进程结束 或到超时时间
p.terminate() 强制子进程退出
p.name 进程的名字
p.pid 进程的PID
三、示例
import multiprocessing #导入多进程模块 import time #导入时间模块 def worker(args,interval): print("start worker {0}".format(args)) time.sleep(interval) #暂停时间:秒 print("end worker {0}".format(args)) def main(): print("start main") p1 = multiprocessing.Process(target=worker,args=(1,1)) p2 = multiprocessing.Process(target=worker,args=(2,2)) p3 = multiprocessing.Process(target=worker,args=(3,3)) p1.start() p1.join(timeout=3) p2.start() p3.start() print("the number of CPU is {0}".format(multiprocessing.cpu_count())) for p in multiprocessing.active_children(): print("the name of active children is {0},{1} pid is alive".format(p.name,p.pid)) print("end main") if __name__ == '__main__': main()
运行结果
四、单个元素的元组表示方法 (1,)
3、多进程 的 组件——Lock 锁
一、锁的概念
若是有多个线程同时操做一个对象,若是没有很好地保护该对象,会形成程序结果的不可预期。因而 锁 的概念应运而生。
4、多进程 的 共享内存——Value 和 Array
一、python的multiprocessing模块也给咱们提供了共享内存的操做
二、通常的变量在进程之间是无法进行通信的,multiprocessing提供了Value和Array模块,他们能够在不通的进程中共同使用。