1)进程锁
import multiprocessing
import time
# lock = multiprocessing.Lock()
# lock.acquire 获得锁
# lock.release 释放锁
# with lock:
# 不加锁程序,多个进程可以随机进行运作
# number +1
# number +3
# def add(number,value,lock):
# # with lock:
# print("init add{0} number = {1}".format(value,number))
# for i in xrange(1,6):
# number += value
# time.sleep(value)
# print("add{0} number = {1}".format(value,number))
# 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("main end")
# 加锁的程序,必须等抢到资源的进程结束后才会执行另外一个进程
def add(number,value,lock):
lock.acquire()
try:
print("init add{0} number = {1}".format(value, number))
for i in xrange(1, 6):
number += value
time.sleep(value)
print("add{0} number = {1}".format(value, number))
except Exception as e:
raise e
finally:
lock.release()
# with lock:
# print("init add{0} number = {1}".format(value,number))
# for i in xrange(1,6):
# number += value
# time.sleep(value)
# print("add{0} number = {1}".format(value,number))
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("main end")
2)进程共享内存
# multiprocessing给我们提供了Value和Array模块,他们可以在不同的进程中共同使用
import multiprocessing
import time
def add(number,add_value):
try:
print("init add{0} number = {1}".format(add_value, number.value))
for i in xrange(1, 6):
number.value += add_value
time.sleep(add_value)
print("add{0} number = {1}".format(add_value, number.value))
except Exception as e:
raise e
def change(arr):
for i in range(len(arr)):
arr[i] = -arr[i]
if __name__ == "__main__":
number = multiprocessing.Value("i",0)
arr = multiprocessing.Array("i",range(10))
print(arr[:]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
p1 = multiprocessing.Process(target=add,args=(number,1))
p2 = multiprocessing.Process(target=add,args=(number,3))
p3 = multiprocessing.Process(target=change,args=(arr,))
p1.start()
p2.start()
p3.start()
p3.join()
print(arr[:]) # [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
print("main end")