主页 > 知识库 > Python多进程共享numpy 数组的方法

Python多进程共享numpy 数组的方法

热门标签:智能手机 呼叫中心市场需求 银行业务 铁路电话系统 检查注册表项 服务器配置 美图手机 网站文章发布

为什么要用numpy

    Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。
    Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组(在TensorFlow里面偏向于矩阵理解),也没有各种运算函数。因而不适合数值运算。
    NumPy的出现弥补了这些不足。

引用:https://zhuanlan.zhihu.com/p/32513483

共享 numpy 数组

需要用到 numpy 时往往是数据量较大的场景,如果直接复制会造成大量内存浪费。共享 numpy 数组则是通过上面一节的 Array 实现,再用 numpy.frombuffer 以及 reshape 对共享的内存封装成 numpy 数组,代码如下:

# encoding:utf8
import ctypes
import os
import multiprocessing

import numpy as np

NUM_PROCESS = multiprocessing.cpu_count()


def worker(index):
    main_nparray = np.frombuffer(shared_array_base, dtype=ctypes.c_double)
    main_nparray = main_nparray.reshape(NUM_PROCESS, 10)
    pid = os.getpid()
    main_nparray[index, :] = pid
    return pid


if __name__ == "__main__":
    shared_array_base = multiprocessing.Array(
        ctypes.c_double, NUM_PROCESS * 10, lock=False)
    pool = multiprocessing.Pool(processes=NUM_PROCESS)
    result = pool.map(worker, range(NUM_PROCESS))
    main_nparray = np.frombuffer(shared_array_base, dtype=ctypes.c_double)
    main_nparray = main_nparray.reshape(NUM_PROCESS, 10)
    print( main_nparray )

运行结果:

到此这篇关于Python多进程共享numpy 数组的方法的文章就介绍到这了,更多相关Python多进程共享numpy 数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • 分析详解python多线程与多进程区别
  • 手把手带你了解python多进程,多线程
  • 总结python多进程multiprocessing的相关知识
  • Python多线程与多进程相关知识总结
  • python实现多进程并发控制Semaphore与互斥锁LOCK
  • python 多进程和多线程使用详解
  • python 实现多进程日志轮转ConcurrentLogHandler
  • Python多进程与多线程的使用场景详解
  • python多进程执行方法apply_async使用说明
  • Python 多进程原理及实现
  • python多线程和多进程关系详解
  • Python多进程的使用详情

标签:上海 沈阳 新疆 长治 河南 红河 乐山 沧州

巨人网络通讯声明:本文标题《Python多进程共享numpy 数组的方法》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266