1 #!/usr/bin/env python 2 #coding:utf-8 3 4 from multiprocessing import Pool 5 6 def f(x): 7 return x*x 8 9 if __name__ == '__main__': 10 p = Pool(5) 11 print(p.map(f, [1, 2, 3])) 12 13 14 #直接起了三个进程,多进程
子进程与父进程的关系
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 from multiprocessing import Process 5 import os 6 7 def info(title): 8 print title 9 print 'module name:', __name__ 10 if hasattr(os, 'getppid'): # only available on Unix 11 print 'parent process:', os.getppid() 12 print 'process id:', os.getpid() 13 14 def f(name): 15 info('function f') 16 print 'hello', name 17 18 if __name__ == '__main__': 19 info('main line')#此时是父进程 20 p = Process(target=f, args=('bob',))#这边是调用的子进程 21 p.start() 22 p.join()
进程锁
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 from multiprocessing import Process, Lock 5 6 def f(l, i): 7 l.acquire() 8 print 'hello world', i 9 l.release() 10 11 if __name__ == '__main__': 12 lock = Lock() 13 14 for num in range(10): 15 Process(target=f, args=(lock, num)).start()
进程之间的通信
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 ''' 5 from multiprocessing import Process, Queue#这个Queue跟直接import Queue不一样 6 7 def f(q): 8 q.put([42, None, 'hello']) 9 10 if __name__ == '__main__': 11 q = Queue() 12 p = Process(target=f, args=(q,)) 13 p.start() 14 print q.get() # prints "[42, None, 'hello']" 15 p.join() 16 17 18 #共享数据 19 20 ''' 21 22 from multiprocessing import Process,Queue 23 24 25 def f(q,n): 26 q.put([n,'hello']) 27 28 29 if __name__ == '__main__': 30 q = Queue() 31 for i in range(5): 32 p = Process(target=f,args=(q,i)) 33 p.start() 34 35 while True: 36 print q.get() 37 38 39 #将数据都保存一个一个队列中(Queue)
进程之间内存共享value,array
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 from multiprocessing import Process, Value, Array 5 6 def f(n, a): 7 n.value = 3.1415927 8 for i in range(len(a)): 9 a[i] = -a[i] 10 11 if __name__ == '__main__': 12 num = Value('d', 0.0) 13 arr = Array('i', range(10)) 14 15 p = Process(target=f, args=(num, arr)) 16 p.start() 17 p.join() 18 19 print num.value 20 print arr[:] 21 22 23 #数据和列表级别的数据共享
使用较多的内存共享
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 from multiprocessing import Process, Manager 5 6 def f(d, l): 7 d[1] = '1' 8 d['2'] = 2 9 d[0.25] = None 10 l.reverse() 11 12 if __name__ == '__main__': 13 manager = Manager() 14 15 d = manager.dict() 16 l = manager.list(range(10)) 17 18 p = Process(target=f, args=(d, l)) 19 p.start() 20 p.join() 21 22 print d 23 print l 24 25 26 #进程之间的内存共享不是真正的内存共享,是通过一个中间通道来进行共享,线程才是真正的共享,support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Queue, Value and Array