Python多程序共享numpy 陣列的方法

2022-09-25 08:00:11 字數 1238 閱讀 1625

python中提供了list容器,可以當作陣列使用。但列表中的元素可以是任何物件,因此列表中儲存的是物件的指標,這樣一來,為了儲存乙個簡單的列表[1,2,3]。就需要三個指標和三個整數物件。對於數值運算來說,這種結構顯然不夠高效。

python雖然也提供了array模組,但其只支援一維陣列,不支援多維陣列(在tensorflow裡面偏向於矩陣理解),也沒有各種運算函式。因而不適合數值運算。

numpy的出現彌補了這些不足。

引用:www.cppcns.com需要用到 numpy 時往往是資料量較大的場景,如果直接複製會造成大量記憶體浪費。共享 numpy 陣列則是通過上面一節的 array 實現,再用 numpy.frombuffer 以及 reshape 對共享的內larnbxjzb存封裝成 numpy 陣列,**如下:

# encoding:utf8

import

import os

import multiprocessing

import numpy as np

num_process = multiprocessing.cpu_cou程式設計客棧nt()

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.arlarnbxjzbray(

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 多程序 共享資料

coding utf 8 from multiprocessing import process,manager import time import random defkkk a list,number for i in range 10 time.sleep random.randrange ...

python多程序共享資料

python的multiprocessing模組提供兩種共享記憶體,sharedctypes與manager,manager效率較低,但支援遠端共享記憶體。sharedctypes效率較高,快manager兩個數量級,在多程序訪問時與普通記憶體訪問相當 共享方式 支援的型別 shared memor...

python 多程序共享變數Manager

manager的字典型別 from multiprocessing import manager import collections m manager share dict m.dict struct 簡單型別可以直接賦值,後續可以直接做加減計算 share dict 1 1 print sha...