您的位置:首页 > 编程语言 > Python开发

python中进程相关知识点。很强大

2017-06-03 22:49 483 查看
进程

# 单核CPU实现多任务:时间片轮转
--------------------------------------------------------------------------------------
重点(进程池,process类,Queue)
作业:如何利用fork创建三个进程.
--------------------------------------------------------------------------------------

一 linux系统下利用fork创建进程:

# fork在父子进程分别完成不同任务的方法。(根据返回值的不一样,利用if,else完成不同任务)
# 进程中的变量全部独立

1进程是一个具体的应用程序,线程是进程中的一个分支,为单独完成程序中的某一项或一组功能而存在。
应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程(线程是进程中的实体,一个线程必须有一个父进程)。

2进程的执行顺序是由操作系统的调度算法决定的。造成调度的进程和子进程的顺序是不一样的。

3fork是通过复制的方式获得子进程。

4操作系统保存进程之间彼此是隔离的,不能通过通过全局变量让进程直接传递数据。

二multiprocessing import Process:
#直接利用process创建进程,传递任务函数,启动进程
#继承process类创建进程,重写run()启动进程调用的是start函数。
Process创建的是子进程对象
p.name,   p.pid,  p.is_alive()
p.start(),  p.join(),  p.terminate()
p.join()让父进程等待响应的子进程结束,并且回收资源。
p.join()让父进程等待的状态称为阻塞
P = Process(target = 函数名,name ='重命名',args=(),kwargs={})
process里面的name是给进程对象进行重命名
用Process继承类,继承类的名字就是对象.name的名字
用Process继承类用的更多。继承类用run()方法,参数在继承类的__init__方法内传参
run()方法实现的是进程对象具体的功能
判断p.is_alive()存活 的条件,在p.start()之后,在p.join()之前。

三进程池:批量创建进程的集合,当任务完成后,进程回到进程池,等待下次任务,复用进程。

异步添加任务是一次性向进程池添加任务。(进程池创建之后,如果不关闭进程池,父进程结束之后,程序就结束。所以需要进程池)。 

     19.   同步添加任务是任务按顺序添加,任务完成后添加下一个任务。(同步添加可以不用关闭进程池)。

进程池默认进程个数跟当前主机CPU的核数相关。print(os.cpu_count())#获得当前主机CPU的核数。
p = Pool(3)   #设置进程池里面的进程数
p.apply #阻塞式执行,就是任务挨个执行,任务执行完毕在进行下一个任务执行
p.apply_async  #非阻塞式执行,批量处理任务,不等每个程序执行完毕执行。
p.apply_async(func#定义p调用的函数功能,(i,)#传入的参数元祖))
p.close() #异步添加任务即apply_async一定要close,原因是主进程执行结束会直接结束其他进程。#同步添加任务即apply不需要关闭close.
p.terminate()#不管任务是否结束,立即终止任务。

四,queue队列 #实现进程中的通信
q = Queue(3) # 初始化一个Queue对象,能够接受三条put消息:q.put('消息1'),q.put('消息2').....
q.get(mst)用来取得数据q.get('消息')。。q.put('4',timeout=3)等待3秒阻塞。。
当队列满的时候,put可能会阻塞。q.put('4',block=flase)
如果消息数量大于需要接受的值,使用try,except来接受。
显示当前队列消息数量,使用q.qsize(); 判断都列是否为空,Queue.empty(),为空返回True,反之flase; Queue.full(),队列是否满了,满了返回True,反之flase
q.get_nowait()等价于q.put('4',block=flase)
当队列为空,get可能会阻塞。q.get(block=flase)关闭阻塞。
进程池中如果要用Queue要通过Manager().Queue()
原理:在内存中开一
a5d6
段公共的缓冲区

五,僵尸进程 
子进程结束,资源没有回收称为僵尸进程。
父进程产生子进程,子进程结束,父进程正在进行,并且没有回收子进程资源。-僵尸进程
os.wait() #让父进程等待子进程结束,并回收僵尸进程资源。意味着父进程要等待子进程代码先结束。
父进程产生子进程,父进程先结束,子进程在运行,称为孤儿进程。父进程pid被回收,被一个特定的进程收养。孤儿进程属于后台进程的一种,不会阻塞前台进程的输出。
process创建的子进程,在创建的时候就关闭了键盘输入流。不可以从键盘读入内容。
fork,process都会产生僵尸进程。回收僵尸进程的语句是:process的join,fork的wait。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python