為什么要用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多進程的使用詳情