python多进程实现CPU100%使用

由于昨天的回顾了一些多线程方面的事儿,在群里问了问题:是否可以通过一个脚本控制八个以上的脚本,实现部分资源共享,从而实现八核cpu的100%使用

学习之后,受益颇深。对python的又产生了新的认识

ProcessPoolExecutor介绍如下

它使用进程池来异步地执行调用。 ProcessPoolExecutor 会使用 multiprocessing 模块,这允许它绕过 全局解释器锁(GIL) 但也意味着只可以处理和返回可封存的对象。

multiprocessing介绍如下

multiprocessing 是一个支持使用与 threading 模块类似的 API 来产生进程的包。 multiprocessing 包同时提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了 全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。 它在 Unix 和 Windows 上均可运行。

ProcessPoolExecutor实现了文章头部所提问题。通过这种方法,我们可以绕过GIL的限制,实现机器的高效利用,即使遇到CPU密集型的问题任务我们也能轻松解决

下面我从官网抄了段代码,稍加注释后进行参数说明

import concurrent.futures

import math

import time

PRIMES = [

112272535095293,

112582705942171,

112272535095293,

115280095190773,

115797848077099,

1099726899285419]

def is_prime(n):

if n < 2:

return False

if n == 2:

return True

if n % 2 == 0:

return False

sqrt_n = int(math.floor(math.sqrt(n)))

for i in range(3, sqrt_n + 1, 2):

if n % i == 0:

return False

return True

def aa():

print('我被调用了')

def main():

# max_workers进程数量为2,不填的话默认最猛,默认61

with concurrent.futures.ProcessPoolExecutor(max_workers=10, initializer=aa()) as executor:

# chunksize使用1个线程,timeout超时没完成抛出异常

# is_prime此处用了一个变量,加入多个变量可以采用将PRIMES[0] = [变量1,变量2],然后去is_prime修改相应代码根据映射关系修改

for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES, timeout=5, chunksize=1,)):

print('%d is prime: %s' % (number, prime))

if __name__ == '__main__':

main()

程序中,首先定义了一个需要大量计算的函数is_prime,然后在主函数修改一些参数,此时应该打开任务管理器查看cpu占用,点击CPU字眼让其按CPU占用率排序,方便查看

max_workers修改为1时,我得pycharm的cpu占用大约为15左右,max_workers修改为5时,我得pycharm的cpu占用大约为33左右,这说明了我们的这个参数是程序启动的python进程数量

chunksize修改为1和1000进行对比,发现二者的cpu占用基本没有什么变化,这说明我们这个是每个进程开启的线程数量(我的理解),官网有详细介绍,如下

# 使用 ProcessPoolExecutor 时,

# 这个方法会将 iterables 分割任务块并作为独立的任务并提交到执行池中。

# 这些块的大概数量可以由 chunksize 指定正整数设置。

# 对很长的迭代器来说,使用大的 chunksize 值比默认值 1 能显著地提高性能。

其中的executor.map介绍如下

# map(func, *iterables, timeout=None, chunksize=1)

# 类似于 map(func, *iterables) 函数,除了以下两点:

# iterables 是立即执行而不是延迟执行的;

# func 是异步执行的,对 func 的多个调用可以并发执行。

看到cpu100%运行竟然有些欣慰?

当然了,使用map函数貌似不是很舒服,还得回去看看multiprocessing的原理和使用

话说到这,哪个广告说7天入门python,出来解释一下multiprocessing是啥玩意?

python实现多进程同时计算_python多进程实现CPU100%使用相关推荐

  1. python多进程存储数据_python – 多进程还是多线程? – 并行化数百万次迭代的简单计算并将结果存储在单个数据结构中...

    第一个选项 – 服务器进程 创建服务器进程.它是Multiprocessing包的一部分,允许并行访问数据结构.这样,每个进程都将直接访问数据结构,锁定其他进程. Server process A m ...

  2. python多进程存储数据_Python 多进程及进程间通信

    python 因 GIL 的存在,处理计算密集型的任务时无法高效利用多核 CPU 的计算资源,这时就需要使用多进程来提高对 CPU 的资源利用.Python 多进程主要用 multiprocessin ...

  3. python开多少进程合适_python多进程基础

    python中的多进程编程方式和多线程非常相似,几乎可以说只是换了一些函数,有了之前讲过的多线程基础,很多地方我就只展示一些代码,在涉及到差别的地方再着重说明. 本文分为如下几个部分事先说明 最简单的 ...

  4. python多进程编程实例_Python多进程编程multiprocessing代码实例

    下面记录一下多进程编程的别一种方式,即使用multiprocessing编程 import multiprocessing import time def get_html(n): time.slee ...

  5. python进程池调用实例方法_Python 多进程并发操作中进程池Pool的实例

    在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.当被操作对象数目不大时,可以直接利用multiprocessing中的Process ...

  6. python 多进程 内存增长_python 多进程 内存 copy-on-write

    由于python  中有个GIL 的东西,所使用的线程 python线程对于  cpu密集型的应用是没有作用的   对于io密集型的应用可以体现价值.如果想要利用多核就得使用多进程编程. python ...

  7. python多进程读写文件_Python多进程写文件时的一些探究

    问题提出 在没有并发控制的情况下,Python多进程向同一个文件写数据(限制单次写入数据大小)是安全的吗? 这里的安全是指: 不会有进程的日志丢失(被覆盖) 两次写入的数据不会相互混着输出(譬如A进程 ...

  8. python 输出在固定位置_python多进程/线程抢占stdoutput总是在固定位置截断上个输出?...

    自己写的爬虫包里面有个简单的日志输出函数logging,没做任何线程安全方面的处理,其核心如下: log = "%s %s\t%s-%s\t%s | %s" % (time.str ...

  9. win python 判断 所有 子进程 结束_python 多进程如何终止或重启子进程?

    这里有个完整的实例 MD5值重复文件多进程检查工具 测试过程中经常发现MD5值相同的图片.之前没有用并发,检查过程经常需要一个小时,现在改成多进程.一般3分钟以内可以完成处理(48核). 此模式也是自 ...

最新文章

  1. 三代纠错软件LoRDEC安装和使用(0.6版本)
  2. java 集合 介绍_java集合类基本简介
  3. linux连接redis 命令_在Docker中使用Redis
  4. 数据库-聚合函数-max函数
  5. go 安装 mysql 链接驱动
  6. opencv 常见细碎问题解决
  7. 什么是CAS机制?(进阶篇)
  8. MAC 安装 pygraphviz 找不到头文件
  9. window系统服务器改名,微软:不会将 Windows Server 改名为 Microsoft Server 系统
  10. Scheme调试手册(四)
  11. Nginx源码阅读 --- http模块 --- TCP连接过程
  12. 我爱淘冲刺阶段站立会议2每天任务5
  13. Python 三大利器:迭代器、生成器、装饰器
  14. C#快速调用海康威视工业相机的SDK拍照获取图片
  15. [转贴]去除迅雷广告和弹出广告窗口
  16. word20161229
  17. 向内看 —— Stay hungry.Stay foolish
  18. LTE物理层概述(6)-- LTE之调制与解调及其matlab仿真
  19. python之subprocess
  20. 【永久免费】胜率95%,非常精准外汇mt4趋势波段指标,无未来(最新版)

热门文章

  1. torch uint8 筛选数据
  2. Django 无法加载静态文件(js,css,image)解决办法
  3. Python lambda表达式与函数式编程
  4. test argument is not supported anymore. Use chainer.using_config
  5. linux设置mysql定时任务_原创 Linux下实现Mysql定时任务备份数据
  6. 系统封装工具_去工具化/脚本化理解,自动化运维落地最佳实践之业务/架构/模型/方法...
  7. Freemarker + xml 实现Java导出word
  8. 机器人简化图画手绘图_床上用的扫地机器人,彻底清除细菌,不再担心酒店卫生问题...
  9. python求偏导_python实现点位精度评定
  10. mqtt session保持 订阅消息_MQTT系列 | MQTT消息的发布和订阅