【发布时间】:2019-05-18 21:57:43
【问题描述】:
假设我有一个现有数组,我们不想对其进行任何更改,但希望将其转换为 ctype 数组并稍后在所有多处理之间共享。
我想要共享的实际数组是 120,000 x 4 的形状,它太大了,无法在此处全部输入,所以让我们假设这样的数组更小,看起来像这样:
import numpy as np
import multiprocessing as mp
import ctypes
array_from_data = np.array([[275,174,190],
[494, 2292, 9103],
[10389,284,28],
[193,746,293]])
我读过其他讨论 ctype 数组和多处理的帖子,例如 this one。但是,答案与我正在寻找的答案并不完全相同,因为到目前为止,它们并不完全是关于转换现有的 NumPy 数组。
我的问题如下:
1) 如何将现有的 Numpy 数组简单转换为 ctype 数组?
2) 如何以简单的方式使数组在所有多进程之间共享?
提前谢谢你。
编辑:对实际数组的拼写和一些说明
EDIT2:显然操作系统本身会影响多处理的行为方式,我需要指定它:我的操作系统是 Windows 10 64 位。
【问题讨论】:
-
为什么需要转换才能共享?
-
需要在多进程之间共享大数组的原因是为了减少将同一个大数组一遍又一遍地传递给多进程中的函数的开销。转换的原因是没有转换,共享一个numpy数组是不可能的,根据别人在其他帖子里说的。
-
假设
fork方法或通过forkserver的全局访问,我看不出ndarray(数字类型)不能正常工作的任何原因。跨度> -
老实说,两周前是我第一次了解多处理的时候,所以我对整个事情还是陌生的,并且忘记了它与 numpy 东西结合的 sn-ps。如果你不介意,你能给我看一个在所有多处理东西之间共享现有数组的简单示例吗?提前谢谢@DavisHerring
-
你用的是什么启动方式? (您的操作系统对此有很大影响!)
标签: python arrays numpy multiprocessing ctypes