python2.7 python3 多进程共享内存 线程 封装继承案例

在这里插入图片描述
multiprocessing.Value(typecode_or_type, *args[, lock])。

该方法返回从共享内存中分配的一个ctypes 对象,其中typecode_or_type定义了返回的类型。它要么是一个ctypes类型,要么是一个代表ctypes类型的code。比如c_bool和’b’是同样的,因为’b’是c_bool的code。

from multiprocessing import Value,Array,Lock,Process
from threading import Event

class Base(object):
    def __init__(self):
        self.event = Event()

    def add(self,number,add_value,lock):
        lock.acquire()
        try:
            print ("init add{0} number = {1}".format(add_value, number.value))
            for i in range(1, 6):
                number.value += add_value
                print ("***************add{0} has added***********".format(add_value))
                self.event.wait(0.001)
                print ("add{0} number = {1}".format(add_value, number.value))
        except Exception as e:
            raise e
        finally:
            lock.release()

    def change(self,arr):
        for i in range(len(arr)):
            arr[i] = -arr[i]

class More(Base):
    def __init__(self):
        self.lock = Lock()
        self.number = Value('i', 0)
        self.arr = Array('i', [1,2,3,4])
        super(More,self).__init__()

    def run(self):
        p1 = Process(target=self.add,args=(self.number, 1, self.lock))
        p2 = Process(target=self.add,args=(self.number, 3,self.lock))
        p3 = Process(target=self.change,args=(self.arr,))
        p1.start()
        p2.start()
        p3.start()
        p3.join()
        print ("main end")

if __name__ == "__main__":
    More().run()

服务进程

Manager() 返回的管理器对象控制一个服务进程,该进程保存Python对象并允许其他进程使用代理操作它们。

Manager() 返回的管理器支持类型: list 、 dict 、 Namespace 、 Lock 、 RLock 、 Semaphore 、 BoundedSemaphore 、 Condition 、 Event 、 Barrier 、 Queue 、 Value 和 Array

from multiprocessing import Process, Manager

def f(d, l):
    d[1] = '1'
    d['2'] = 2
    d[0.25] = None
    l.reverse()

if __name__ == '__main__':
    with Manager() as manager:
        d = manager.dict()
        l = manager.list(range(10))

        p = Process(target=f, args=(d, l))
        p.start()
        p.join()

        print(d)
        print(l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图像处理大大大大大牛啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值