python 多进程提速

事实上,很多时候Python的多线程是无法提速的。
这是因为CPython解释器本身不是线程安全的,因此存在全局解释器锁(GIL, global interpreter lock),1次只允许1个线程执行Python代码,因此,1个Python进程通常不能使用多个CPU核心。
与Python语言本身无关,Jython等没有这个限制。

ThreadPoolExecutor()函数需要1个参数指定线程池中线程的数量,而ProcessPoolExecutor()函数通常不需要指定进程数,默认是os.cpu_count()函数返回的CPU数量,也可以自行指定其他值,但对CPU密集型的处理而言,进程数不得超过CPU数量。


说了这么多,亲测有效的还是多进程加速

   import multiprocessing
   pool = multiprocessing.Pool(processes=4)
   return_value = pool.apply_async(func_name, (参数列表,))
   p.close()
   p.join()

from multiprocessing import Pool
p = Pool()
result = p.apply_async(foo, args=(a, ))
# foo和a分别是你的方法和参数,这行可以写多个,执行多个进程,返回不同结果
 p.close()
 p.join()

新建一个进程池,并指定本机cpu核心数量为4(看你的机子cpu有多少核)
这样主程序运行时就会建立出4个额外的进程,每个进程可以运行在不同核心上,从而实现了多核并行.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值