1.进程的创建
frommultiprocessing import Process
import time,os
def Hi(name):
time.sleep(3)
print("Hello %s" %name,time.ctime())
print("进程号是",os.getpid())if __name__=="__main__":for i in range(3):
t= Process(target=Hi,args=("萌萌",))
t.start()
print("主进程号:",os.getpid())
print("end all")
View Code
2.进程的阻碍
frommultiprocessing import Process
import time,os
def hello(name):
time.sleep(2)
print("Hello %s" %name,time.ctime())
print("进程号是",os.getpid())if __name__=="__main__":
L=[]for i in range(3):
t= Process(target=hello,args=("梦梦",))
t.start()
L.append(t)
# t.join()
# t.join() # 阻碍主进程for t inL:
t.join()
print("主进程号:",os.getpid())
print("end all")
View Code
2.2.进程的继承调用
from multiprocessing importProcessimporttime,osclassMyProcess(Process):#def __init__(self,name):
#super(MyProcess,self).__init__()
#self.name =name
defrun(self):
time.sleep(1)print("hello",self.name,time.ctime())if __name__ == '__main__':
p_list=[]for i in range(3):#p =MyProcess("张三")
p =MyProcess()
p.start()
p_list.append(p)#p.join()
for p inp_list:
p.join()print("end")
View Code
3.进程的守护
#___''Daemon:进程守护、子进程跟随主进程一起退'''
classmyprocess:defmusic1(self):print("begin to listen %s" %time.ctime())
time.sleep(2)print("stop to listen %s" %time.ctime())defgame1(self):print("begin to game %s" %time.ctime())
time.sleep(3)print("stop to game %s" %time.ctime())if __name__ == "__main__":
duixiang=myprocess()
p1= Process(target=duixiang.music1)
p2= Process(target=duixiang.game1)
p2.daemon=True
L=[]
L.append(p1)
L.append(p2)for i inL:
i.start()#i.join()
print("all over end.......")
4.进程通信队列-Queue
from multiprocessing importProcess,Queueimporttimedeffoo(q):
time.sleep(1)
q.put(6776)
q.put({"name":"张三"})if __name__ == '__main__':
q=Queue()#q=multiprocessing.Queue()
#创建一个进程队列
p=Process(target=foo,args=(q,))
p.start()print(q.get())print(q.get_nowait())print(q.get(block=False))
5.进程通信-管道Pipe
from multiprocessing importProcess, Pipeimporttimeimportosdeff(conn):
conn.send([12,{"name":"子豪"},"hello"])
date=conn.recv()print("父亲发的消息是",date,time.ctime())
conn.close()print("子进程进程号%s,子进程拿到的数据ID %s:"%(os.getpid(),id(conn)))if __name__ == '__main__':
parent_conn,child_conn=Pipe()
p=Process(target=f,args=(child_conn,))
p.start()
sunsend=parent_conn.recv()print("儿子发消息是:",sunsend,time.ctime())
parent_conn.send("儿子,你好")
parent_conn.close()print("父进程进程号%s,父进程拿到的数据ID %s:" %(os.getpid(),id(parent_conn)))
p.join()
6.进程同步
'''加锁的部分完全是串行的'''
from multiprocessing importProcess,Lockimporttimedeff(l,i):
l.acquire()
time.sleep(1)print("hello",i)
l.release()if __name__ == '__main__':
lock=Lock()for num in range(10):
Process(target=f,args=(lock,num)).start()
7.进程间的数据共享 Managers
# ------------------Managers 进程间数据共享-----------------
# # Queue、Pipe 只实现了数据的互交并没有实现数据的共享
from multiprocessing import Manager,Process
import os
def fun(d,L,n):
d[n]="1" # {"0": "1"}
d["2"]="2" # {"0": "1","2":"2"}
L.append(n)
print('子进程进程号:%s, 字典id %s,列表id %s'%(os.getpid(),id(d),id(L)))
if __name__ == '__main__':
with Manager() as manager:
d = manager.dict()
L = manager.list(range(9))
for i in range(10):
p = Process(target=fun,args=(d,L,i))
p.start()
p.join()
print(d)
print(L)
print("所有任务都已经结束")
# print(d)
# print(L)
8.进程池
deff(i):
time.sleep(1)print(i)if __name__ == '__main__':
pool=Pool(5) #不填参数默认以CPU数量运行
for i in range(100):#pool.apply(func=f,args=(i,)) # 同步接口
pool.apply_async(func=f,args=(i,))
pool.close()
pool.join()#进程池的格式先close后join、调用顺序是固定的
print("over all")