1、进程状态
from multiprocessing import Process
def func():
print('这是target指定的函数')
class MyProcess(Process):
def __init__(self,cname):
# Process.__init__(self)
# super(MyProcess,self).__init__()
super().__init__()
self.cname = cname
def run(self):
print('展示子进程的调用')
if __name__ == '__main__':
# mp = MyProcess(target = func)
# #没有指定target。自动调用run方法。
mp = MyProcess('进程类')
mp.start()
注意点:
进程是操作系统进行分配资源的基本单位。(就绪状态下最耗资源)
线程是操作系统进行调度资源的基本单位。
进程池
apply 使用的是阻塞的方式调用函数,阻塞方式必须等待上一个进程退出之后才能执行下一个进程(并发)
apply_async 使用的是非阻塞的方式调用(并行)
并发:同时提出需求(轮流去做)
并行:同时运行(同时去做)
from multiprocessing import Pool
import os
import time
def work(times):
print('这是第{}次的任务,由进程编号{}的进程来完成'.format(times,os.getpid()))
time.sleep(2)
if __name__ == '__main__':
pool =Pool(3)
for i in range(0,10):
# pool.apply_async(work,args=(i,))
pool.apply(work,args=(i,))
pool.close()#关闭
pool.join()#必须放在close后面,功能是让上面子程序都进行完之后结束整个进程
进程之间的通信(进程队列)
# 通信队列
from multiprocessing import Queue
que = Queue(3) #最多只能存三个,下面存四个文件,运行时阻塞。永远不结束,等你删除一个
que.put(1)
que.put(2)#写是put。
que.put(3)
# que.put(4,False)#block = False,阻塞存不进去立刻报错
# que.put(4,True,2)#block = True,timeout = 2,阻塞后等待2秒再报错
print(que.get())#读取是get
print(que.get())#读取是get
print(que.get())#读取是get
que.put(123) #因为上面读取出了三个值,所以又可以存了
print(que.get())#读取是get