python 多进程

 

多进程写法和多线程类似  (多进程不能在jupyter中运行)

import multiprocessing as mp   # 加载多进程包

def job(q,a):
    s = 0
    for i in range(a):
        s += i
    q.put(s)
def main():
    q = mp.Queue()             # 定义一个队列
    p1 = mp.Process(target = job,args = (q,10))
    p2 = mp.Process(target = job,args = (q,20))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    res1 = q.get()
    res2 = q.get()
    print(res1)
    print(res2)

if __name__ == '__main__':
    main()

进程池

import multiprocessing as mp
def job(x):
    return x**2

def multiP():
    pool = mp.Pool(processes = 2)    # 定义一个进程池 processes = 2 指使用两个核进行计算 
    res = pool.map(job,range(10))   # map可以有返回值 
    print(res)   
    
    res = pool.apply_async(job,(2,))   # apply_async() 只能传入一个值
    print(res.get())
    
    multi_res = [pool.apply_async(job,(i,)) for i in range(10)]
    print([res.get()for res in multi_res])
    
if __name__ == '__main__':
    multiP()

 

定义共享内存

import multiprocessing as mp

value = mp.Value('d',1.2)        #定义一个共享值  类型为小数(‘d’)
array = mp.Array('i',[1,2,3])    # 定义一个共享数组 类型为整数(‘i’)  数组只能是一维的

进程锁

import multiprocessing as mp
import time

def job(v,num):
    for _ in range(10):
        time.sleep(0.1)
        v.value += num
        print(v.value)
        

def main():
    v = mp.Value('i',0)
    p1 = mp.Process(target = job,args = (v,1))
    p2 = mp.Process(target = job,args = (v,3))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

if __name__ == '__main__':
    main()

无锁输出:

import multiprocessing as mp
import time

def job(v,num,l):
    l.acquire()
    for _ in range(10):
        time.sleep(0.1)
        v.value += num
        print(v.value)
    l.release()
        

def main():
    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()

if __name__ == '__main__':
    main()

有锁输出:

 

参考:

莫烦python

https://www.bilibili.com/video/av16944405/

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值