簡體   English   中英

python中共享數組的RawArray的最大大小

[英]Max size of RawArray for shared array in python

嘗試創建用於多個進程中的共享內存的數組時,出現斷言錯誤:

    shared_array = RawArray('d', xsize)
  File "C:\Python27\lib\multiprocessing\sharedctypes.py", line 88, in RawArray
    obj = _new_value(type_)
  File "C:\Python27\lib\multiprocessing\sharedctypes.py", line 68, in _new_value
    wrapper = heap.BufferWrapper(size)
  File "C:\Python27\lib\multiprocessing\heap.py", line 242, in __init__
    assert 0 <= size < sys.maxint
AssertionError

但是,即使我運行如下所示的基本示例,它似乎仍在maxint數字之上:

from multiprocessing.sharedctypes import RawArray
import sys

xsize = 999999999
#create an empty array    
print('MaxInt:',sys.maxint)
print('My Size:',xsize)
shared_array = RawArray('d', xsize)

打印語句顯示:

('MaxInt:', 2147483647)
('My Size:', 999999999)

為什么會發生這種情況?當具有非常大的數組時,如何為多處理創建共享數組? 我的計算機有128GB的RAM,所以這不應該成為問題。

這里的int將是“ C樣式” int,它通常為4個字節,但是您需要這樣做,因此可以通過執行以下操作來獲得數組的最大大小:

from sys import maxint
from ctypes import sizeof, c_int

maxint // sizeof(c_int)

對您來說(具有32位版本)將是大約512M元素。 但是,如果您運行的是32位版本,則地址空間將是一個更大的限制因素,並且幾乎可以肯定,您將無法分配那么大的數組。

我使用的是Python 2.7和3.7的64位版本,其中sys.maxintsys.maxsize均為2**63-1 ,並且都允許我分配具有十億( 10**9 )個元素的數組(並且我可以看到Python的〜4GB RSS ),盡管花了一段時間才能將其全部歸零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM