python实现多进程同时计算_python多进程实现CPU100%使用
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%使用相关推荐
- python多进程存储数据_python – 多进程还是多线程? – 并行化数百万次迭代的简单计算并将结果存储在单个数据结构中...
第一个选项 – 服务器进程 创建服务器进程.它是Multiprocessing包的一部分,允许并行访问数据结构.这样,每个进程都将直接访问数据结构,锁定其他进程. Server process A m ...
- python多进程存储数据_Python 多进程及进程间通信
python 因 GIL 的存在,处理计算密集型的任务时无法高效利用多核 CPU 的计算资源,这时就需要使用多进程来提高对 CPU 的资源利用.Python 多进程主要用 multiprocessin ...
- python开多少进程合适_python多进程基础
python中的多进程编程方式和多线程非常相似,几乎可以说只是换了一些函数,有了之前讲过的多线程基础,很多地方我就只展示一些代码,在涉及到差别的地方再着重说明. 本文分为如下几个部分事先说明 最简单的 ...
- python多进程编程实例_Python多进程编程multiprocessing代码实例
下面记录一下多进程编程的别一种方式,即使用multiprocessing编程 import multiprocessing import time def get_html(n): time.slee ...
- python进程池调用实例方法_Python 多进程并发操作中进程池Pool的实例
在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.当被操作对象数目不大时,可以直接利用multiprocessing中的Process ...
- python 多进程 内存增长_python 多进程 内存 copy-on-write
由于python 中有个GIL 的东西,所使用的线程 python线程对于 cpu密集型的应用是没有作用的 对于io密集型的应用可以体现价值.如果想要利用多核就得使用多进程编程. python ...
- python多进程读写文件_Python多进程写文件时的一些探究
问题提出 在没有并发控制的情况下,Python多进程向同一个文件写数据(限制单次写入数据大小)是安全的吗? 这里的安全是指: 不会有进程的日志丢失(被覆盖) 两次写入的数据不会相互混着输出(譬如A进程 ...
- python 输出在固定位置_python多进程/线程抢占stdoutput总是在固定位置截断上个输出?...
自己写的爬虫包里面有个简单的日志输出函数logging,没做任何线程安全方面的处理,其核心如下: log = "%s %s\t%s-%s\t%s | %s" % (time.str ...
- win python 判断 所有 子进程 结束_python 多进程如何终止或重启子进程?
这里有个完整的实例 MD5值重复文件多进程检查工具 测试过程中经常发现MD5值相同的图片.之前没有用并发,检查过程经常需要一个小时,现在改成多进程.一般3分钟以内可以完成处理(48核). 此模式也是自 ...
最新文章
- 三代纠错软件LoRDEC安装和使用(0.6版本)
- java 集合 介绍_java集合类基本简介
- linux连接redis 命令_在Docker中使用Redis
- 数据库-聚合函数-max函数
- go 安装 mysql 链接驱动
- opencv 常见细碎问题解决
- 什么是CAS机制?(进阶篇)
- MAC 安装 pygraphviz 找不到头文件
- window系统服务器改名,微软:不会将 Windows Server 改名为 Microsoft Server 系统
- Scheme调试手册(四)
- Nginx源码阅读 --- http模块 --- TCP连接过程
- 我爱淘冲刺阶段站立会议2每天任务5
- Python 三大利器:迭代器、生成器、装饰器
- C#快速调用海康威视工业相机的SDK拍照获取图片
- [转贴]去除迅雷广告和弹出广告窗口
- word20161229
- 向内看 —— Stay hungry.Stay foolish
- LTE物理层概述(6)-- LTE之调制与解调及其matlab仿真
- python之subprocess
- 【永久免费】胜率95%,非常精准外汇mt4趋势波段指标,无未来(最新版)
热门文章
- torch uint8 筛选数据
- Django 无法加载静态文件(js,css,image)解决办法
- Python lambda表达式与函数式编程
- test argument is not supported anymore. Use chainer.using_config
- linux设置mysql定时任务_原创 Linux下实现Mysql定时任务备份数据
- 系统封装工具_去工具化/脚本化理解,自动化运维落地最佳实践之业务/架构/模型/方法...
- Freemarker + xml 实现Java导出word
- 机器人简化图画手绘图_床上用的扫地机器人,彻底清除细菌,不再担心酒店卫生问题...
- python求偏导_python实现点位精度评定
- mqtt session保持 订阅消息_MQTT系列 | MQTT消息的发布和订阅