拽猫的尾巴 发表于 2022-3-12 22:37:21

我想在多进程里 共享 多维数组 的内存

1、我想在多进程里 共享 多维数组 的内存

2、这个数组是可以 读 + 写 的

我找到挺多的教程好像都只能读不能写{:9_234:}

ba21 发表于 2022-3-12 23:13:52

不能用于Pool,只能用于Process
from multiprocessing import Process, Value, Array

def test(num, mystr, arr):
    # 修改整型
    num.value *= 2

    # 修改字符数组
    for i in range(len(mystr)):
      mystr = '1'

    # 修改浮点型数组
    for i in range(len(arr)):
      arr = arr * 2

def showVars(num, myStr, floatArr):
    print('整型: ', num.value)
    print('字符数组: ', myStr[:])
    print('浮点型数组: ', floatArr[:])

if __name__=='__main__':
    # 初始化
    num = Value('i', 2) # 整型
    myStr = Array('u', "http://www.1118pc.com") # 字符串(字符数组) 使用'u'
    floatArr = Array('d', ) # 浮点型 数组

    print('==================初始化:==================')
    showVars(num, myStr, floatArr)

    # 开启3个进程
    ps =
    for p in ps:
      p.start()
    for p in ps:
      p.join()
    print()
    print('==================经过子进程修改后:==================')
    showVars(num, myStr, floatArr)

拽猫的尾巴 发表于 2022-3-13 18:00:57

ba21 发表于 2022-3-12 23:13
不能用于Pool,只能用于Process

二维数组呢?二维数组我想共享内存,一维度的没问题{:9_221:}

ba21 发表于 2022-3-13 18:34:37

拽猫的尾巴 发表于 2022-3-13 18:00
二维数组呢?二维数组我想共享内存,一维度的没问题

有1维的列子不会用2维?

ba21 发表于 2022-3-13 18:51:42

拽猫的尾巴 发表于 2022-3-13 18:00
二维数组呢?二维数组我想共享内存,一维度的没问题



转成1维,内部你想当2维使用,你在内部在转城2维。

拽猫的尾巴 发表于 2022-3-14 14:34:10

ba21 发表于 2022-3-13 18:51
转成1维,内部你想当2维使用,你在内部在转城2维。

每曾设想过的道路{:9_229:}
Array只能一维把我思路锁死了

拽猫的尾巴 发表于 2022-3-14 15:12:24

ba21 发表于 2022-3-13 18:51
转成1维,内部你想当2维使用,你在内部在转城2维。

试了下,现在有点不理解的你话{:9_229:}

在内部转成2维的意思是在你的floatArr = Array('d', [[,]])的意思吗
我这样做报错了:TypeError: must be real number, not list

我也试了下把 pandas 的 dataframe 放进去,
但是报错了:TypeError: must be real number, not DataFrame

ba21 发表于 2022-3-14 19:24:59

拽猫的尾巴 发表于 2022-3-14 15:12
试了下,现在有点不理解的你话

在内部转成2维的意思是在你的floatArr = Array('d', [[

python 多进程,只支持1维。
数组这东西不管几维,它都是1维没错吧。

拽猫的尾巴 发表于 2022-3-15 15:16:43

ba21 发表于 2022-3-14 19:24
python 多进程,只支持1维。
数组这东西不管几维,它都是1维没错吧。

但是如果在list里在添加个list,Array的第一个参数好像没有合适的

ba21 发表于 2022-3-15 15:22:45

拽猫的尾巴 发表于 2022-3-15 15:16
但是如果在list里在添加个list,Array的第一个参数好像没有合适的

是的,python 数组的表现形式是 list 。
所我我早说了,在调用多进程前你把多维数组转1维,在每个进程中如果你要以多维的形式操作,你再把1维转多维。

isdkz 发表于 2022-3-15 22:20:56

拽猫的尾巴 发表于 2022-3-15 15:16
但是如果在list里在添加个list,Array的第一个参数好像没有合适的

他的意思大概是这样:
arr1 =     # 一维,在 Array 里用这个
print(f'一维:{arr1}')
arr2 = list(map(list, zip(* * 3)))   # 二维,在进程内部转换成二维使用
print(f'二维:{arr2}')
页: [1]
查看完整版本: 我想在多进程里 共享 多维数组 的内存