python 多进程并发(进程池)

前言

最近在处理大数据相关的东西,数据动辄上百万,还不能用 GPU 加速,于是开始动起了多进程的念头。众所周知,Python 的多线程是假的,不过好在开发者老大还是给我们留了一个活路,也就是进程池。这个方法的优点在于进程的并发细节完全不用我们操心,我们只需要把并发的任务仍到进程池里就好了。

直接使用进程池

import multiprocessing

defmission(param1):
	print(param1)# 设置一个允许3个进程并发的进程池
pool = multiprocessing.Pool(processes =3)for i inrange(1000):
	# 将进程仍入进程池,mission 后面的这个含有 i 的tuple 代表给mission的参数
	pool.apply_async(mission,(i))
	
# 扔了 1000个进程进进程池后,关闭进程池,不允许新的进程加入
pool.close()# 运行进程池中的进程
pool.join()
	
12345678910111213141516

一些说明

  1. 示例中使用的是apply_async这个代表是非阻塞的,意味着输出不保证顺序,而apply 是阻塞的,输出是按照输入顺序输出的。

  1. pool.terminate() 代表着结束工作进程,不再处理未完成的任务

  1. pool.join() 阻塞主进程,等待子进程的推出,join 要在 close 或 terminate 之后使用。

  1. 进程数大家可以按需要调整,它不是越大越好,也不是说 CPU 只有 4个核就只能开到 4,在个人的 PC 上,开到 10 会有一个很明显的提升,在个人任务中,速度提升了至少 7 倍左右。

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值