我用python.multiprocessing.sharedctypes.RawArray在多个进程之间共享大型 numpy 数组。我注意到,当这个数组很大(> 1或2 Gb)时,初始化会变得非常慢,读/写也会慢得多(并且读/写时间不可预测,有时非常快,有时非常非常慢)慢的)。
我制作了一个小型示例脚本,它仅使用一个进程,初始化一个共享数组并对其进行多次写入。并测量执行这些操作的时间。
import argparse
import ctypes
import multiprocessing as mp
import multiprocessing.sharedctypes as mpsc
import numpy as np
import time
def main():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-c', '--block-count', type=int, default=1,
help='Number of blocks to write')
parser.add_argument('-w', '--block-width', type=int, default=20000,
help='Block width')
parser.add_argument('-d', '--block-depth', type=int, default=15000,
help='Block depth')
args = parser.parse_args()
blocks = args.block_count
blockwidth = args.block_width
depth = args.block_depth
start = time.perf_counter()
shared_array = mpsc.RawArray(ctypes.c_uint16, blocks*blockwidth*depth)
finish = time.perf_counter()
print('Init shared array of size {:.2f} …Run Code Online (Sandbox Code Playgroud)