首页 > 代码库 > 多进程
多进程
01最简单的使用
1 from multiprocessing import Pool2 3 def f(x):4 return x*x5 if __name__ == "__main__":6 p = Pool(5)7 print (p.man(f,[1,2,3]))
02子进程与父进程
我们知道父进程派生子进程 但是内存空间却是独立的 而子进程都是父进程通过fork方法过程
也就是 复制了一份 当容量比较大的程序 要慎重使用多线程
1 from multiprocessing import Process 2 3 import os 4 5 def info(title): 6 print title 7 print "module name:",__name__ 8 if hasattr(os,‘getppid‘): 9 print ‘parent process:‘,os.getppid()10 print ‘process id:‘,os.getpid()11 12 def f(name):13 info(‘funtion f‘)14 print ‘hello‘,name15 16 if __name__ == "__main__ ":17 info("main line")18 print "-----------"19 p = Process(target=f,args=(‘bob‘,))20 p.start()21 p.join()
03进程锁
类似多线程的线程锁,但是我们知道进程是独立的内存,工作不干扰的 那么这个功能没有太多用处,可能用在 多个进程同一平面输出
1 from multiprocessing import Process ,Lock 2 import time 3 def f (l,i): 4 5 l.acquire() 6 print ‘hello world‘,i 7 l.release() 8 9 if __name__ =="__main__":10 lock =Lock()11 12 for num in range(10):13 Process(target=f,args=(lock,num)).start()
04 进程间通信
进程是内存独立呢 那么如何进行进程间通信呢?就只有借助其他东西承载
也就是两个内存空间的桥梁
【1】 Queue
1 from multiprocessing import Process ,Queue 2 3 def f(q,n): 4 q.put([n,‘hello‘]) 5 6 if __name__ == "__main__": 7 q = Queue() 8 for i in range(5): 9 p = Process(target=f,args=(q,i))10 p.start()11 print q.get()
【2】Value and Array
1 from multiprocessing import Value,Array,Process 2 def f(n,a,raw): 3 n.value = http://www.mamicode.com/3.15"color: #008080;"> 4 for i in range(5): 5 a[i] = -a[i] 6 raw.append(999) 7 print raw 8 if __name__ =="__main__": 9 num = Value(‘d‘,0.0)10 arr = Array(‘i‘,range(10))11 raw_list = range(10)12 print num.value13 print arr[:]14 p = Process(target=f,args=(num,arr,raw_list))15 p.start()16 p.join()17 18 print num.value19 print arr[:]
【3】manager
1 from multiprocessing import Manager ,Process 2 3 def f (d,l): 4 d[1] = ‘1‘ 5 d[‘2‘] = 2 6 d[0.25]= None 7 l.reverse() 8 9 if __name__ =="__main__":10 manager = Manager()11 12 d = manager.dict()13 l = manager.list(range(10))14 p = Process(target=f,args=(d,l))15 p.start()16 p.join()17 18 print d19 print l
manager 是比较慢的一种空间方式,但是能把字典传过去 而且manager还可以在两台不同主机间传递
05进程池-Pool
限制几个进程同时在运行
多进程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。