1进程:一个运行的程序就叫进程,例如 qq,微信
进程是操作系统分配资源的基本单位
2.创建一个进程:
process = multiprocessing.Process(target=test)#test:表示目标函数
process.start()
import multiprocessing,time,os
def test():
# 获取子进程 pid
pid = multiprocessing.current_process().pid
# 获取父进程的 pid
ppid = os.getppid()
# 查看当前进程
print (multiprocessing.current_process())
print (" 子进程: " ,pid,ppid)
for i in range (10 ):
print (" 子进程 lllll------" )
time.sleep(0.1 )
# 根据 pid 杀死进程
os.kill(pid,9 )
if __name__ == '__main__' :
# 查看当前进程
print (multiprocessing.current_process())
pid = multiprocessing.current_process().pid
print (" 父进程 " ,pid)
t = multiprocessing.Process(target =test)
t.start()
for ie in range (10 ):
print (" 父进程 -------" )
time.sleep(0.1 )
3.Process中的参数:
group:进程组
target:目标函数
name:进程名字
args:以元组的方式给目标函数传参
kwargs:以字典的方式给目标函数传参
t = multiprocessing.Process(group=None,target=test, name="myprocess", args=("小新 ",10))
t = multiprocessing.Process(group=None,target=test, name="myprocess",kwargs={"name": "小白 ", "age": 20}
4.进程之间不共享全局变量
进程之间都是独立的,所以进程之间不能共享全局变量但是进程之间也需要通信
4.1进程之间的通信:
使用队列,队列的进出顺序是先进先出
q = multiprocessing.Queue(3) #3:表示可接收的消息数,如果没有指定的话默认为无上限
q.get()#获取队列中的一个值,参数默认为 True,如果队列为空了,就一直等待下队列里的消息,
传入 False的话,如果没有数据可读取了就会报错
q.get(False) = q.get_nowait()
q.put()#往队列里面写入数据 参数默认为 True,如果队列为空了,就一直等待下一个消息传入,
传入 False的话,如果没有数据可读取了就会报错
q.put(False) = q.put_nowait()
q.full()#用来判断队列是否满了
q.qsize()#获取队列的值的长度
q.empty()#判断队列是否为空
5.用 Process创建子进程的时候,父进程会等子进程执行完再退出
6.进程池: Pool
6.1 创建进程池
p = multiprocessing.Pool(3)#创建一个进程池,最多可容纳三个进程
p.apply(test):test:目标函数,同步执行
p.apply_async(test):test:目标函数,异步执行,父进程不会等子进程执行完
p.close()#进程池必须要关闭
6.2 进程池中的通信:
:
import multiprocessing
def test(qu):
for i in range (5 ):
if qu.full():
print (" 队列满了 " )
break
qu.put(i)
print ("---" ,i)
def test2(qu):
while True :
if qu.qsize() == 0 :
print (" 队列空了 " )
break
print (qu.get())
if __name__ == '__main__' :
q = multiprocessing.Manager().Queue(4 )
p = multiprocessing.Pool(3 )
for i in range (10 ):
p.apply(test,args =(q,))
p.apply(test2,args =(q,))
p.close()
7.进程与线程
7.1 进程是操纵系统资源调度和分配的基本单位 —— 线程是 CPU调度和分配的基本单位
7.2 一个进程只要拥有一个线程
7.3 线程是比进程更小的基本单位
7.4 线程的存在必须依赖于进程