多进程二

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")


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值