首页 > 编程知识 正文

子进程返回错误139,python多进程进程池

时间:2023-05-06 09:06:20 阅读:225779 作者:3972

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

""" coding:utf-8"""#coding:utf-8import randomimport timeimport multiprocessingdef 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 Poolimport 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 Poolimport 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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。