在使用并行计算的时候希望维护同一个变量,比如将高分辨率的全球数据(例如30m)重采样为0.25度的数据,全球(720,1440),原始数据是10×10度的单个文件(存到单一文件太大了),全球的话就是18×36=648个文件,如果用18个进程并行的话只能将这些文件分成36组,每个进程负责36个文件的重采样,保存到(720,1440)的数组,这样每个进程都会输出一个(720,1440)的数组,最后我们还需要将这些数据合并成一个数组,还是很麻烦的,这里给出共享内存的方法,让所有进程直接对共享内存中的数组进行读写,从而直接得到我们需要的数组:
参考官方说明:https://docs.python.org/zh-cn/3.8/library/multiprocessing.shared_memory.html

from osgeo import gdal
from osgeo import gdalconst
from zl import zl
import time
from multiprocessing import Pool,shared_memory
import numpy as np
pathin = ''
pathout = ''
a = np.zeros((12,360,720))
shm = shared_memory.SharedMemory(create=True, size=a.nbytes)
b = np.ndarray(a.shape, dtype=a.dtype, buffer=shm.buf)
b[:] = a[:]
def run(i):existing_shm = shared_memory.SharedMemory(name=shm.name)c = np.ndarray((12,360,720), dtype=np.float, buffer=existing_shm.buf)c[:,:,:]=iexisting_shm.close()if __name__ == '__main__':print(time.strftime('%Y-%m-%d %H:%M:%S'))p = Pool(12)p.map(run, np.arange(12))p.close()p.join()shm.unlink()np.save(pathout + '1.npy',b)print(time.strftime('%Y-%m-%d %H:%M:%S'))

简单来说,就是在创建数组的时候将空数组放在共享内存,然后每个进程进行计算都调用这个共享内存中的数据,多个进程可以同时对这个数组进行修改,从而实现进程之间的通信。最终保存的数据就是一个(12,360, 720)的数组,第一维度(12)每个维度上对应的数据就是维度的顺序。

Python并行计算使用共享内存相关推荐

  1. python共享内存mmap_python - IPC在单独的Docker容器中的Python脚本之间共享内存 - 堆栈内存溢出...

    问题 我已经编写了一个神经网络分类器,该分类器可以获取海量图像(每张图像约1-3 GB),将其打补丁,然后分别通过网络传递这些补丁. 培训的进行过程非常缓慢,因此我对其进行了基准测试,发现用大约50秒 ...

  2. python slice是共享内存吗_python共享内存实现进程通信

    1.概述 共享内存可以说是最有用的进程间通信方式.两个不同的进程共享内存的意思是:同一块物理内存被映射到两个进程的各自的进程地址空间.一个进程可以及时看到另一个进程对共享内存的更新,反之亦然.采用共享 ...

  3. c++ fork 进程时 共享内存_尚学堂百战程序员:Python多进程与共享内存

    多进程使用 linux下可使用 fork 函数 #!/bin/env python import os print 'Process (%s) start...' % os.getpid() pid ...

  4. cuda编程python接口_CUDA共享内存问题(以及将CUDA与python / ctypes一...

    (请注意,此答案中的代码还提供了有关如何在与使用python ctypes的python应用程序共享的库中使用CUDA代码(例如CUDA设备内核)的完整秘诀/示例.如果您希望使用CUDA库功能,答案h ...

  5. python多进程之间共享内存

    一.为什么要用到共享内存 进程之间交换数据我们可以通过建立本地RPC,但往往比较慢,因为要花时间去执行数据传递. 此时,如果有一个实时性要求比较高的跨进程功能,共享内存就是一个不错的选择. 1.什么是 ...

  6. python slice是共享内存吗_在共享内存中使用numpy数组进行多处理

    在共享内存中使用numpy数组进行多处理 我希望在共享内存中使用numpy数组,以便与多处理模块一起使用.困难之处在于它像一个numpy数组一样使用,而不仅仅是作为一个ctype数组使用.from m ...

  7. python跨进程共享内存

    生成内存地址name # In the first Python interactive shell import numpy as np import time a = np.array([1, 1 ...

  8. python多进程共享内存_python 进程间通信 共享内存

    python多进程通信实例分析 python多进程通信实例分析操作系统会为每一个创建的进程分配一个独立的地址空间,不同进程的地址空间是完全隔离的,因此如果不加其他的措施,他们完全感觉不到彼此的存在.那 ...

  9. python共享内存

    python共享内存 共享内存(Shared Memory)是最简单的进程间通信方式,它允许多个进程访问相同的内存,一个进程改变其中的数据后,其他的进程都可以看到数据的变化. 共享内存是进程间最快速的 ...

最新文章

  1. 华为诺亚开源首个亿级中文多模态数据集-悟空,填补中文NLP社区一大空白
  2. window.requestAnimationFrame
  3. SpringTest2
  4. 机器翻译 - 日期翻译
  5. 当推荐系统遇到物联网...
  6. 一个简单的Hook demo
  7. [转载]C语言中的奇技淫巧
  8. 咸鱼的 Github 情报 | 一个支持边下边播、无版权限制和自动上传的BT离线下载程序...
  9. 【linux浅谈017】gbd调试常用指令
  10. Python模块之logging详解
  11. 怎么修改我的世界服务器封面,《我的世界:初识服务器》
  12. [AR/VR教程] SteamVR Unity工具包(二):激光和移动
  13. VR全景电子商务方案/APP/小程序/公众号/网站
  14. python实现电子相册_spring+hibernate+JQuery开发_电子相册_源码
  15. class uesrfun.php,帝国cms-TAG高级管理插件
  16. 三维地理信息平台介绍与比较(转)
  17. 《Linux就该这么学》学习笔记(一)
  18. python数据分析6:双色球 使用线性回归算法预测下期中奖结果
  19. 土木工程成功转行程序员,真香~
  20. 【软件工程基础】结对项目之四则运算题目生成

热门文章

  1. 【Matlab路径规划】A_star算法机器人栅格地图路径规划【含源码 116期】
  2. Google Chrome 91.0.4472.101 正式版
  3. html鼠标放在图片上图片放大
  4. Java实现简单图书馆管理系统
  5. MATLAB与STK互联21:卫星对象操作(12)—加约束条件的可见性问题分析(仰角、距离、视线角约束)
  6. (王道408考研操作系统)第二章进程管理-第二节6、7:调度算法详解2(RR、HPF和MFQ)
  7. 联想小新air13.3 无法开机,非硬件问题!
  8. Android Tv app 与 mobile app 界面呈现的区别
  9. JPG图片怎么转换成PDF,这个方法你要知道
  10. linux系统封装为iso