#!/usr/bin/env python # -*- coding:utf-8 -*- '''多进程锁''' import multiprocessing #lock = multiprocessing.Lock() # lock.acquire() 获取锁 # lock.release() 释放锁 #也可采用with lock的方式,后续缩进,最后不用再释放锁 import time def add(number,value,lock): lock.acquire() try: print('add{0} is {1}'.format(value,number)) for i in xrange(1,5): number +=value time.sleep(1) print('add{0} is {1}'.format(value,number)) except Exception as e: raise e finally: lock.release() if __name__ == "__main__": lock = multiprocessing.Lock() number = 0 p1 = multiprocessing.Process(target=add,args=(number,1,lock)) p2 = multiprocessing.Process(target=add,args=(number,3,lock)) p1.start() p2.start() print('end')
#!/usr/bin/env python # -*- coding:utf-8 -*- '''共享内存''' import multiprocessing import time def add(number,add_value,lock): lock.acquire() try: print('add int{0} is {1}'.format(add_value,number.value)) for i in xrange(1,5): number.value += add_value time.sleep(1) print('add{0} is {1}'.format(add_value,number.value)) except Exception as e: raise e finally: lock.release() def change(arr): for i in range(len(arr)): arr[i] = -arr[i] print(arr[:]) if __name__ == "__main__": lock = multiprocessing.Lock() number = multiprocessing.Value('i',0)##设置为共享内存 arr = multiprocessing.Array('i',range(10)) p1 = multiprocessing.Process(target=add,args=(number,1,lock)) p2 = multiprocessing.Process(target=add,args=(number,3,lock)) p3 = multiprocessing.Process(target=change,args=(arr,)) p1.start() p2.start() p3.start() print arr[:] print('end')