之前在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中实现多个任务并行相关推荐

  1. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  2. python并行计算_《python并行计算(完结篇):并行方法总结》

    由于python相当易学易用,现在python也较多地用于有大量的计算需求的任务.本文介绍几个并行模块,以及实现程序并行的入门技术.本文比较枯燥,主要是为后面上工程实例做铺垫.完结篇对前期介绍的所有模 ...

  3. python 示例_在Python中带有示例的while关键字

    python 示例 关键字的Python (Python for keyword) while is a keyword (case-sensitive) in python, it is used ...

  4. latex附录中放python代码_在Latex中插入Python代码

    这里指的插入是指最终能在生成的pdf中显示高亮的Python代码. 在Latex中插入Python代码,需要一个第三发的宏包pythonhighlight: https://github.com/ol ...

  5. ppt python 图表_利用python分析weibo数据做成图表放入PPT中

    起因 很久以前,就有个想法,就是自动分析微博的数据,但是之前一直想的是网页版展示,flask想学了好久都没学,偶然的一次看到了一篇关于python处理pptx的文章,再加上同窗三年的室友在毕业后竟然主 ...

  6. cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤

    在cmd中运行.py文件: python的操作步骤 1 打开cmd, 不改变运行的目录: 输入python 空格  调试好的python文件路径 或者python 空格  将python文件拖入cmd ...

  7. shell运行python文件_在python shell中运行python文件的实现

    在python shell中运行python文件的实现 最近在学习flask开发,写好程序后需要在python shell中运行测试功能.专门抽时间研究了下,总结以防止以后遗忘. 这是测试文件的结构, ...

  8. iphone看python文件_通过python获取苹果手机备份文件中的照片,视频等信息采集

    前言: 苹果手机用户通常会将手机备份到电脑上,而备份文件通常不会自动删除.在我们电脑取证,或者***到一台电脑后可以通过python脚本获取到备份文件中的一些隐私信息,比如照片.视频.相关软件中的一些 ...

  9. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

最新文章

  1. c语言模拟考试题目,10道C语言笔试模拟题
  2. Django连接mysql数据库
  3. Acwing第 39 场周赛【完结】
  4. centos6编译安装MYSQL8_CentOS 6.4编译安装MySQL8.0
  5. 为什么越有钱的人越轻松
  6. 2021暨南大学计算机技术上岸经验贴
  7. cp复制多个文件到指定目录
  8. 计算机组成原理解答题和计算题
  9. 正态分布某一点的概率怎么算_笔记|复习金融计量中概率随笔1(样本推整体)
  10. Zabbix离线安装部署
  11. win10 -- 注册机认为是病毒,死活不让下载 --那就关了它的自带杀毒软件
  12. 最新淘汰服务器cpu,2019 最新 至强 Xeon E3服务器系列 CPU天梯图
  13. springboot发送qq邮件详细步骤
  14. appstore截屏的制作方法
  15. Oracle怎么清除视图数据,oracle如何删除视图?
  16. 猪猪视频显示没有服务器,猪猪小视频软件
  17. 分别使用while、do-while和for循环输出1-1000中含有7或者7倍数的整数之和及个数-详解
  18. Word标题跟随正文样式缩进的解决办法
  19. pod install 时遇到 Automatically assigning platform `iOS` with version `11.0` on target XXX......
  20. 图片显示上下有空白的解决办法

热门文章

  1. iPhone软件开发编程语言Objective C学习资料
  2. 真爱无敌--倩女幽魂
  3. 1002NowCoder数列
  4. 二手交易平台碳减排,有了评估标准
  5. 阿里云短信验证(代码)demo完整教程
  6. ubuntu docker login Error saving credentials: error storing credentials - err: exit status 1, out:
  7. Vim设置默认字体、窗口大小和配色方案
  8. 2021年中国化妆刷市场趋势报告、技术动态创新及2027年市场预测
  9. 手动输入10个数字进行排序——选择排序
  10. jQuery ztree 自制一套 灰蓝皮肤