2012-04-10 64 views
0

python會將所有的字符串存儲在athene_pool中,並且永遠不會釋放它們,所以bigtext prcocessing最近困擾了我。 我將文章內容保存到redis,並從redisclient獲取它們,並將它們發送到http response.while序列化可能會導致太多的內存,是否有任何好主意來解決這樣的事情? 我不知道如果Django產生太多的迴應,它如何釋放它們以保持低存儲?如果python處理太多的bigtext,內存溢出

回答

1

Python不彙集所有字符串,請參閱Are strings pooled in Python

例如,這個10K字符串不集中:

>>> a = '5' * 10000 
>>> b = '5' * 10000 
>>> a is b 
False 

不過短短的5字符串彙集:

>>> a = '5' * 5 
>>> b = '5' * 5 
>>> a is b 
True 

人機工程學:你不必擔心長字符串被保存在內存中超過必要的時間。

+0

關於'is'測試:python'is'操作符測試兩個對象是否真的是同一個對象。在這種情況下,我濫用操作符來檢查兩個字符串是否合併爲一個字符串。 – Ondergetekende 2012-04-10 09:38:34

+0

即使短字符串只在源代碼中以字符串文字形式出現時才彙集(或通過某些函數「sys' IIRC明確實現)。編譯器不斷地將你的片段中的'5' * 5'摺疊到''55555''中,你會看到是否將它放入函數並在其上運行'dis.dis'。 – delnan 2012-04-10 10:45:40