进程池进阶

进程池

def wahaha():
    time.sleep(1)
    print(os.getpid())
    return True

if __name__ == '__main__':
    p = Pool(5)  # CPU的个数 或者 +1
    ret_l = []
    for i in range(20):
       ret = p.apply_async(func = wahaha) # async  异步的
       ret_l.append(ret)
    for ret in ret_l:
        print(ret.get())

# 异步的 apply_async
# 1.如果是异步的提交任务,那么任务提交之后进程池和主进程也异步了,
#主进程不会自动等待进程池中的任务执行完毕
# 2.如果需要主进程等待,需要p.join
# 但是join的行为是依赖close
# 3.如果这个函数是有返回值的
# 也可以通过ret.get()来获取返回值
# 但是如果一边提交一遍获取返回值会让程序变成同步的
# 所以要想保留异步的效果,应该讲返回对象保存在列表里,所有任务提交完成之后再来取结果
# 这种方式也可以去掉join,来完成

进程池函数:

from multiprocessing import Pool
p = Pool(5)  # 创建进程池并且限定进程的个数
ret = p.apply  # ret 返回值是可以直接打印的 ,是同步
ret = p.apply_async 返回值是一个内存地址,需要用Get获取
#如果一个一个获取则是同步,加入列表获取则是异步
p.join # 堵塞到子进程结束
p.close # 关闭向操作系统的申请

 

posted @ 2018-07-27 16:28  Begin_Again  阅读(112)  评论(0编辑  收藏  举报