多进程

作者: ZAK_ML | 来源:发表于2019-03-17 18:59 被阅读0次

    创建进程

    import multiprocessing as mp

    import threading as td

    def job(a,d):

        print('aaaaa')

    if_name='_main_':   #要在这个框架下运用它,不然会报错

        p1=mp.Process(target=job,arg=(1,2))   #创建进程

        p1.start()

        p1.join()

    queue输出

    def job(q):

        res=0

        for i in range(1000):

            res+=i+i**2+i**3

        q.put(res)

    if_name='_main_': 

        q=mp.Queue()

        p1=mp.Process(target=job,arg=(q,))   #q后要有逗号,不然会报错

        p2=mp.Process(target=job,arg=(q,))

        p1.start()

        p2.start()

        p1.join()

        p2.join()

        res1=q.get()

        res2=q.get()

        print(res1+res2)

    进程池pool

    之前的process中的job是不能有返回值的,只能把返回值放在Q里。在pool里有return

    def job(x):

        return x*x

    def multicore():

        pool=mp.Pool(processes=2) #使用2个核

        res=pool.map(job,range(10))

        print(res)    

        res=pool.apply_async(job,(2,))  #传入的是一个元组,单元素元组定义必须有逗号

        print(res.get())

        multi_res=[pool.apply_async(job,(i,)) for i in range(10)]

        print([res.get() for res in multi_res])

        pool.close()   #关闭pool,使其不在接受新的(主进程)任务

        pool.join()

    共享内存

    value=mp.Value('i',1)   #定义一个变量,可以被每个cpu读取。i为整数,d为小数

    array=mp.Array('i',[1,2,3])   #列表,不能是多维的

    lock锁

    def job(v,num,l):

        l.acquire()  #加锁

        for _ in range(10):

            time.sleep(0.1)

            v.value+=num

            print(v.value)

        l.release()  #取消锁

    def multicore():

        l=mp.Lock()

        v=mp.Value('i',0)

        p1=mp.Process(target=job,args(v,1,l))

        p2=mp.Process(target=job,args(v,3,l))

        p1.start()

        p2.start()

        p1.join()

        p2.join()


    加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行的修改,没错,速度是慢了,牺牲了速度而保证了数据安全。


    python multiprocessing 如何在主进程中捕获子进程抛出的异常,适用于子进程无返回值的场景

    Python3之无法在进程池中使用队列Queue的解决方案

    multiprocessing.Queue()和manger().Queue()的区别

    queue.Queue(),实现一个大小固定的队列

    相关文章

      网友评论

          本文标题:多进程

          本文链接:https://www.haomeiwen.com/subject/yinumqtx.html