python限制cpu占用,多处理限制CPU使用

感谢this question,我成功地将一个代码并行化:1| def function(name, params):

2| results = fits.open(name)

3|

4| return results

5|

6| def function_wrapper(args):

7| return function(*args)

8|

9| params = [...,...,..., etc]

10|

11| p = multiprocessing..Pool(processes=(max([2, mproc.cpu_count() // 10])))

12| args_generator = ((name, params) for name in names)

13|

14| dictionary = dict(zip(names, p.map(function_wrapper, args_generator)))

如果我正确地理解了pool是如何工作的,那么在11行中指定的进程数应该是在给定时间内生成的最大进程数。所以这应该会限制我的CPU使用,对吧?我的意思是,按照我的理解,在第11行中设置的,进程/CPU的最大数量应该是[2, number_of_cpus / 10]的最大值。在

尽管如此,当我运行我的代码时,我发现在我启动后不久,所有的CPU都是100%。我错过什么了吗?在

注意:对于上下文,我需要将我的CPU使用限制在最大核数,因为我将使用共享服务器。在

更新:添加我的代码的裁剪版本。我没有打开一个fits文件,而是创建了一个与我的光谱类似的噪声高斯曲线(尽管它表现得更好…)。在

削减开支有助于解决问题。在函数fnBootstrapInstance中,拟合是在一个二维数组(基本上是一个梯形谱)上执行的,我使用for loop迭代该数组。出于某种原因,删除循环,解决问题,只使用了我指定的核心数量。我的猜测是由于某种原因for循环产生了一系列的子进程(这就是它在htop上出现的方式)。一次迭代一阶ecehelles谱就解决了这个问题。在

^{pr2}$

谢谢大家!在

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值