python多进程 获取子进程的返回值

1、使用进程的队列multiprocessing.Queue,put(),get()方法
子进程不需返回值,将目标结果放入队列中
在主进程中获取 get方法

""" coding:utf-8"""
#coding:utf-8
import random
import time
import multiprocessing


def worker(k,q):
    t = 0
    print "processname",k
    for i in range(10):
        x = random.randint(1, 3)
        t += x
    q.put(t)

if __name__ == '__main__': 
    q = multiprocessing.Queue()
    jobs = []
    for i in range(10):
        p = multiprocessing.Process(target=worker, args=(str(i), q))
        jobs.append(p)
        p.start()
    
    for p in jobs:
        p.join()
    
    results = [q.get() for j in jobs]
    print(results)

打印值:
processname 1
processname 0
processname 2
processname 5
processname 8
processname 3
processname 4
processname 6
processname 9
processname 7
[22, 23, 17, 20, 24, 18, 22, 19, 22, 19]

2、使用Pool.map()
子进程需要返回值,主进程获取返回值的列表

from multiprocessing import Pool
import time
 
def func(i):
    return  i*i
 
if __name__ == '__main__':
    p = Pool(5)
    ret = p.map(func,range(10))
    print(ret)

3、使用pool.apply_async,子进程有返回值,主进程获取子进程返回的对象(非返回值),需使用get方法获取对象的值

from multiprocessing import Pool
import time
 
def func(i):
    return  i*i
 

if __name__ == "__main__":
    print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
    pool = multiprocessing.Pool(processes=8) # 创建4个进程
    results = []
    length = 5000
    for i in xrange(8):
        results.append(pool.apply_async(func, (i,)))
    pool.close() # 关闭进程池,表示不能再往进程池中添加进程,需要在join之前调用
    pool.join() # 等待进程池中的所有进程执行完毕
    print ("Sub-process(es) done.")
    k = 0
    for res in results:       
        k += res.get()
    print k
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值