多任务-进程部分语法、概念总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDNgaoqingrui/article/details/80827747
                                                                        多任务-进程部分总结

进程:通俗理解一个运行的程序或者软件,进程是操作系统资源分配的基本单位。
Process进程类的语法结构如下: 
Process([group [, target [, name [, args [, kwargs]]]]]) 
group:指定进程组,目前只能使用None 
target:执行的目标任务名 
name:进程名字 
args:以元组方式给执行任务传参 
kwargs:以字典方式给执行任务传参 
Process创建的实例对象的常用方法: 
start():启动子进程实例(创建子进程) 
join([timeout]):是否等待子进程执行结束,或等待多少秒 
terminate():不管任务是否完成,立即终止子进程 
Process创建的实例对象的常用属性: 
name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
pid:当前进程的pid(进程号) 
 # 查看当前进程 current_process = multiprocessing.current_process() 
# 获取当前进程的编号 print("work进程编号:", current_process.pid) 
# 获取父进程的编号 print("work父进程的编号:", os.getppid()) 
给子进程指定的函数传递参数 sub_process = multiprocessing.Process(target=show_info, name="myprocess",args=("古力娜扎", 18)) 
进程之间不共享全局变量 
主进程会等待所有的子进程执行完成程序再退出 
销毁子进程的代码 sub_process.daemon = True 
从队列取值使用get方法,向队列放入值使用put方法 
消息队列判断队列是否为空不可靠,可以使用延时和根据个数进行判断
进程池的概念:池子里面放的是进程,进程池会根据任务执行情况自动创建进程,而且尽量少创建进程,合理利用进程池中的进程完成多任务 multiprocessing.Pool常用函数解析: 
apply(func[, args[, kwds]]): 阻塞方式调用函数,args表示以元组方式给函数传参,kwds表示以字典方式给函数传参 
apply_async(func[, args[, kwds]]) :使用非阻塞方式调用函数,args表示以元组方式给函数传参,kwds表示以字典方式给函数传参 
close():关闭Pool,使其不再接受新的任务; 
terminate():不管任务是否完成,立即终止; 
join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后使用;
# 拷贝任务def work():     
    print("复制中...", multiprocessing.current_process().pid)     
    time.sleep(0.5) 
# 创建进程池 # 3:进程池中进程的最大个数 
pool = multiprocessing.Pool(3) 
# 模拟大批量的任务,让进程池去执行 
for i in range(5):     # 循环让进程池执行对应的work任务     # 同步执行任务,一个任务执行完成以后另外一个任务才能执行     
    pool.apply(work) 进程池异步执行任务 pool.apply_async(work)

进程、线程对比
功能对比: 
进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ 线程,能够完成多任务,比如 一个QQ中的多个聊天窗口 
定义对比: 进程是系统进行资源分配基本单位,每启动一个进程操作系统都需要为其分配运行资源。 
线程是运行程序中的一个执行分支,是CPU调度基本单位。 总结:进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位 
关系对比: 线程是依附在进程里面的,没有进程就没有线程 
一个进程默认提供一条线程,进程可以创建多个线程 
区别: 进程之间不共享全局变量 线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 互斥锁或者线程同步 创建进程的资源开销要比创建线程的资源开销要大 进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位 线程不能够独立执行,必须依存在进程中 多进程开发比单进程多线程开发稳定性要强 
优缺点: 多进程: 优点:可以用多核 缺点:资源开销大 多线程: 优点:资源开销小 缺点:不能使用多核


猜你喜欢

转载自blog.csdn.net/CSDNgaoqingrui/article/details/80827747