当前位置: 移动技术网 > IT编程>脚本编程>Python > Python多进程

Python多进程

2018年05月10日  | 移动技术网IT编程  | 我要评论

动漫萝莉被虐小游戏,百变大咖秀张亮是哪一期,进击的巨人漫画70

进程:是资源的集合,一个进程至少包含一个线程。所有程序的进程由系统的父进程拉起。如linux中所有进程由PID:1的进程创建
 
进程间数据交互:
这里需要用到进程包的queue,由于多个进程无法共享数据,所以没有办法使用import queue
 1 from multiprocessing import Process,Queue
 2 
 3 def pan(rr):
 4     rr.put([1,"2sdf"])
 5 
 6 if __name__ == "__main__":
 7     #创建进程queue队列对象
 8     q = Queue()
 9     #创建子进程,target=函数名,args=进程队列对象
10     p = Process(target=pan,args=(q,))
11     #启动进程
12     p.start()
13     #获取队列中的值
14     print(q.get())
15     #等待进程结束
16     p.join()
通过Pipe(管道)实现进程间数据交互
1、管道是一发一收机制
2、如果收的次数大于发的次数,程序就会卡住
 1 from multiprocessing import Process,Pipe
 2 
 3 def execut(conn):
 4     conn.send([1,"hello word"])
 5     print("接收主进程发来的消息:%s"%conn.recv())
 6 
 7 if __name__ == "__main__":
 8     #创建管道对象,当管道对象创建后必定返回两个参数,把这两个参数分别赋给不同的进程即可
 9     Apipe,Bpipe = Pipe()
10     p = Process(target=execut,args=(Bpipe,))
11     p.start()
12     print("接收子进程发来的消息:%s"%Apipe.recv())
13     Apipe.send({"王阳明": "传习录"})
14     p.join()

通过Manager包创建多进程共享

 1 #进程间共享一份数据
 2 #这里Manager实际是将主进程创建的内存对象拷贝给子进程,在所有进程结束后合并所有进程产生的数据。
 3 
 4 from multiprocessing import Process,Manager
 5 import os
 6 
 7 def run(dt,lt):
 8     dt["name"] = "sober"
 9     dt["workdata"] = "2018-05-09"
10     lt.append(os.getpid())
11     print(lt)
12 
13 if __name__ == "__main__":
14     with Manager() as mng:
15         #使用Manager对象创建一个共享字典
16         dt = mng.dict()
17         #使用Manager对象创建一个共享列表
18         lt = mng.list()
19         #存储子进程对象
20         plist = []
21         for i in range(5):
22             #创建子进程
23             p = Process(target=run,args=(dt,lt))
24             p.start()
25             plist.append(p)
26         for n in plist:
27             #等待所有子进程结束
28             n.join()
29 
30         print(dt)
31         print(lt)

进程池使用

 1 from multiprocessing import Process,Pool
 2 import os
 3 
 4 def run(n):
 5     #创建子进程执行函数
 6     print("Start number: %s"%n)
 7 
 8 def backDef(b):
 9     #显示回调函数的信息,打印执行回调函数的PID
10     print("CallBacke Def :%s"%b,os.getpid())
11 
12 if __name__ == "__main__":
13     print("Print master processes PID:%s"%os.getpid())
14     #定义一个进程池,限制进程数为:2
15     pl = Pool(processes=2)
16     #创建进程
17     for i in range(10):
18         #异步进程,func=进程执行方法名,args=方法参数,callback=回调函数
19         pl.apply_async(func=run,args=(i,),callback=backDef)
20     print("Test finish")
21     #先关闭池子,在等待池子内的工作都完成
22     pl.close()
23     pl.join()

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网