python并行_在Python中实现多个任务并行
之前在Fortran中有讲到OpenMP的并行:
这里讲如何在Python中如何实现多个任务的并行。在Python中,multiprocessing模块提供了一个Process类来代表一个进程对象。
Python中只有一个线程(是单线程的),所以是通过启动“进程”来实现并行;而在Fortran的OpenMP中是通过启动“线程”来实现并行。这是实现多任务并行常见的两种解决方案。
直观的理解就是打开电脑的任务管理器(底部栏右击),在应用程序旁边就是“进程”。运行本文的例子程序时,可以发现Python会产生多个“进程”,实现多个任务的并行,截图如下:
而在运行Fortran的OpenMP例子时,单个进程占了近100%CPU(四个核,一个核为25%),也就是OpenMP通过产生多个“线程”,分给指定CPU运行,实现多任务的并行,截图如下:
这边是自己整理的一个Python多任务并行(multiprocessing模块Process类)的例子:
from multiprocessing import Process
import os
import time
def run_proc(name): # 要执行的代码
start_time = time.perf_counter()
for i in range(300000000):
x = 100000^1000000000000
end_time = time.perf_counter()
print ('Process id running on %s = %s' % (name, os.getpid()), '; running time = %s' % (end_time-start_time))
if __name__ == '__main__':
# 串行
print('串行程序')
print('Process id = %s.' % os.getpid())
start_time = time.perf_counter()
run_proc('job1')
run_proc('job2')
run_proc('job3')
run_proc('job4')
end_time = time.perf_counter()
print('CPU执行时间(s)=', (end_time-start_time), '\n')
# 并行
print('并行程序')
print('Process id = %s.' % os.getpid())
start_time = time.perf_counter()
p = Process(target=run_proc, args=('job1',))
p.start()
p = Process(target=run_proc, args=('job2',))
p.start()
p = Process(target=run_proc, args=('job3',))
p.start()
p = Process(target=run_proc, args=('job4',))
p.start()
p.join() # join()方法可以等待子进程结束后再继续往下运行
end_time = time.perf_counter()
print('CPU执行时间(s)=', (end_time-start_time), '\n')
计算结果为:
Python运行速度会比Fortran慢,但熟悉后写起来挺方便的。在科学计算中,如果想用Python写代码,又想赶进度,除了手动操作并行外,还可以用上以上这种并行方法。尤其是当使用超算时,如果没有使用多任务并行,选择多个核的速度和选择一个核的运行的速度相差不多的,这时候如果仍然选择多个核(如12个核)进行运算,就很有可能会极大地浪费超算资源和科研经费。
如果是想返回函数值,可通过共享内存Value来实现,参考资料为[2]。这里写出一个代码例子,如下:
from multiprocessing import Process, Value
def run_proc(name, a, num): # 要执行的代码
num.value = a
if __name__ == '__main__':
num1 = Value('d', 0.0) # 共享内存
num2 = Value('d', 0.0) # 共享内存
p1 = Process(target=run_proc, args=('job1', 100, num1))
p1.start()
p2 = Process(target=run_proc, args=('job2', 200, num2))
p2.start()
p2.join()
print(num1.value)
print(num2.value)
计算结果为:
参考资料:
+1
python并行_在Python中实现多个任务并行相关推荐
- 第一章 第一节:Python基础_认识Python
Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...
- python并行计算_《python并行计算(完结篇):并行方法总结》
由于python相当易学易用,现在python也较多地用于有大量的计算需求的任务.本文介绍几个并行模块,以及实现程序并行的入门技术.本文比较枯燥,主要是为后面上工程实例做铺垫.完结篇对前期介绍的所有模 ...
- python 示例_在Python中带有示例的while关键字
python 示例 关键字的Python (Python for keyword) while is a keyword (case-sensitive) in python, it is used ...
- latex附录中放python代码_在Latex中插入Python代码
这里指的插入是指最终能在生成的pdf中显示高亮的Python代码. 在Latex中插入Python代码,需要一个第三发的宏包pythonhighlight: https://github.com/ol ...
- ppt python 图表_利用python分析weibo数据做成图表放入PPT中
起因 很久以前,就有个想法,就是自动分析微博的数据,但是之前一直想的是网页版展示,flask想学了好久都没学,偶然的一次看到了一篇关于python处理pptx的文章,再加上同窗三年的室友在毕业后竟然主 ...
- cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤
在cmd中运行.py文件: python的操作步骤 1 打开cmd, 不改变运行的目录: 输入python 空格 调试好的python文件路径 或者python 空格 将python文件拖入cmd ...
- shell运行python文件_在python shell中运行python文件的实现
在python shell中运行python文件的实现 最近在学习flask开发,写好程序后需要在python shell中运行测试功能.专门抽时间研究了下,总结以防止以后遗忘. 这是测试文件的结构, ...
- iphone看python文件_通过python获取苹果手机备份文件中的照片,视频等信息采集
前言: 苹果手机用户通常会将手机备份到电脑上,而备份文件通常不会自动删除.在我们电脑取证,或者***到一台电脑后可以通过python脚本获取到备份文件中的一些隐私信息,比如照片.视频.相关软件中的一些 ...
- java python算法_用Python,Java和C ++示例解释的排序算法
java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...
最新文章
- c语言模拟考试题目,10道C语言笔试模拟题
- Django连接mysql数据库
- Acwing第 39 场周赛【完结】
- centos6编译安装MYSQL8_CentOS 6.4编译安装MySQL8.0
- 为什么越有钱的人越轻松
- 2021暨南大学计算机技术上岸经验贴
- cp复制多个文件到指定目录
- 计算机组成原理解答题和计算题
- 正态分布某一点的概率怎么算_笔记|复习金融计量中概率随笔1(样本推整体)
- Zabbix离线安装部署
- win10 -- 注册机认为是病毒,死活不让下载 --那就关了它的自带杀毒软件
- 最新淘汰服务器cpu,2019 最新 至强 Xeon E3服务器系列 CPU天梯图
- springboot发送qq邮件详细步骤
- appstore截屏的制作方法
- Oracle怎么清除视图数据,oracle如何删除视图?
- 猪猪视频显示没有服务器,猪猪小视频软件
- 分别使用while、do-while和for循环输出1-1000中含有7或者7倍数的整数之和及个数-详解
- Word标题跟随正文样式缩进的解决办法
- pod install 时遇到 Automatically assigning platform `iOS` with version `11.0` on target XXX......
- 图片显示上下有空白的解决办法
热门文章
- iPhone软件开发编程语言Objective C学习资料
- 真爱无敌--倩女幽魂
- 1002NowCoder数列
- 二手交易平台碳减排,有了评估标准
- 阿里云短信验证(代码)demo完整教程
- ubuntu docker login Error saving credentials: error storing credentials - err: exit status 1, out:
- Vim设置默认字体、窗口大小和配色方案
- 2021年中国化妆刷市场趋势报告、技术动态创新及2027年市场预测
- 手动输入10个数字进行排序——选择排序
- jQuery ztree 自制一套 灰蓝皮肤