㈠ python調用c庫,c動態分配的內存儲器怎樣釋放,求大神解決
ctypes只能處C的dll,不能是C++的dll。先檢查一下你的C程序是不是用C的compiler編譯的。 另外,32bit的dll要32bit的python,64bit的dll要64bit的python。
㈡ 如何釋放Python佔用的內存
1.充分利用內存
任何一種圖像處理軟體對內存的要求都很高,Photoshop也一樣。如果你在使用Photoshop時,沒有使用其它的一些大軟體,這時你就可以將Photoshop佔用內存資源的比例提高。方法是:進行Photoshop,選擇菜單下File\Preference\Memory & Image Cache命令,將Used by Photoshop的比例提高到80%~90%即可。
2.指定虛擬內存
在處理Photoshop時,內存被用完是很正常的,到時會大大影響Photoshop處理圖像的時間,哪將怎麼解決呢?方法是:你可以用硬碟來作為內存來使用,也就是常說的虛擬內存。請選擇菜單下「File\Preference\Plug-Ins & Scratch Disks」命令。在這里的Scratch Disks下,你可以在硬碟上指定四個驅動器來作為虛擬內存,軟體默認的虛擬內存是在Windows\temp之下。當第一個虛擬內存被使用光之後,Photoshop會自動去使用第二個Scratch Dsik,這樣就提高了執行速度。
3.釋放內存與硬碟空間
在進行圖像處理時,你所進行的所有操作將會記錄在Photoshop的History(歷史記錄)工作板中。這些操作包括:復制到Clipboard(粘貼板)、Undo(恢復)、Pattern(填充物)、Histories(記錄)等幾種,選擇菜單下「Edit\Purge」命令。
進行這些操作之後,Photoshop會將這些圖像和數據保存在內存里,使用該命令後,即將這些被佔用的內存空間釋放出來(RAM:Oh! Freeden)這樣就讓Photoshop有更多的Resource(資源)可用,自然就提高了效率。但注意,如果這些操作佔用的內存比較少時,就沒有必要使用啦!
除此之外,在處理大型圖片時,Photoshop會自動產生一些臨時文件,一般都很大,如果你處理的是一個20MB大小的宣傳畫時,那麼臨時文件可能就是100~150MB。請在Windows\temp或在你設定虛擬內存的驅動器里,將產生的Photoshop臨時文件*.tmp刪除掉。
㈢ 如何釋放Python佔用的內存
象的引用計數減少;
函數運行結束,所有局部變數都被銷毀,對象的引用計數也就隨之減少。例如 foo(x) 運行結束,x 被銷毀;
當變數被賦值給另一個對象時,原對象的引用計數也會減少。例如 x = 4,這時候 3 這個對象的引用計數就減 1 了;
使用 del 刪除一個變數也會導致對象引用減少。例如 del x;
對象從集合對象中移除。例如 lst.remove(x);
包含對象的集合對象被銷毀。例如 del lst;
這些操作都可能使對象變成垃圾回收對象,由垃圾收集器負責收集,當然垃圾收集器也負責處理循環引用對象。
要立即釋放,可以使用下面的代碼
import gc
gc.collect()
㈣ python如何清理內存
引用計數,這是 Python 的垃圾回收策略。補充一下。
解釋器(也就是你說的 Shell)負責跟蹤對象的引用計數,垃圾收集器負責釋放內存。
如何釋放?可以通過銷毀對象的引用,使引用計數減少至 0。假設 x = 3,以下情況會使 3 這個整型對象的引用計數減少;
函數運行結束,所有局部變數都被銷毀,對象的引用計數也就隨之減少。例如 foo(x) 運行結束,x 被銷毀;當變數被賦值給另一個對象
時,原對象的引用計數也會減少。例如 x = 4,這時候 3 這個對象的引用計數就減 1 了;
使用 del 刪除一個變數也會導致對象引用減少。例如 del x;
對象從集合對象中移除。例如 lst.remove(x);
包含對象的集合對象被銷毀。例如 del lst;
這些操作都可能使對象變成垃圾回收對象,由垃圾收集器負責收集,當然垃圾收集器也負責處理循環引用對象。
推薦學習《python教程》。
㈤ 怎麼處理Python和Ctype調用的內存釋放問題
建立一個全局字典或列表,然後在函數中把不想被回收的對象加入前面的字典(或列表)
㈥ 如何釋放Python佔用的內存
在上文的優化中,對每500個用戶,會進行一些計算並記錄結果在磁碟文件中。原本以為這么做,這些結果就在磁碟文件中了,而不會再繼續佔用內存;但實際上,python的大坑就是Python不會自動清理這些內存。這是由其本身實現決定的。具體原因網上多有文章介紹,這里就不了。
本篇博客將貼一個筆者的實驗腳本,用以說明Python確實存在這么一個不釋放內存的現象,另外也提出一個解決方案,即:先del,再顯式調用gc.collect(). 腳本和具體效果見下。
實驗環境一:Win 7, Python 2.7
[python] view plain
from time import sleep, time
import gc
def mem(way=1):
print time()
for i in range(10000000):
if way == 1:
pass
else: # way 2, 3
del i
print time()
if way == 1 or way == 2:
pass
else: # way 3
gc.collect()
print time()
if __name__ == "__main__":
print "Test way 1: just pass"
mem(way=1)
sleep(20)
print "Test way 2: just del"
mem(way=2)
sleep(20)
print "Test way 3: del, and then gc.collect()"
mem(way=3)
sleep(20)
運行結果如下:
[plain] view plain
Test way 1: just pass
1426688589.47
1426688590.25
1426688590.25
Test way 2: just del
1426688610.25
1426688611.05
1426688611.05
Test way 3: del, and then gc.collect()
1426688631.05
1426688631.85
1426688631.95
對於way 1和way 2,結果是完全一樣的,程序內存消耗峰值是326772KB,在sleep 20秒時,內存實時消耗是244820KB;
對於way 3,程序內存消耗峰值同上,但是sleep時內存實時消耗就只有6336KB了。
實驗環境二: Ubuntu 14.10, Python 2.7.3
運行結果:
[plain] view plain
Test way 1: just pass
1426689577.46
1426689579.41
1426689579.41
Test way 2: just del
1426689599.43
1426689601.1
1426689601.1
Test way 3: del, and then gc.collect()
1426689621.12
1426689622.8
1426689623.11
[plain] view plain
ubuntu@my_machine:~$ ps -aux | grep test_mem
Warning: bad ps syntax, perhaps a bogus '-'? See
ubuntu 9122 10.0 6.0 270916 245564 pts/1 S+ 14:39 0:03 python test_mem.py
ubuntu 9134 0.0 0.0 8104 924 pts/2 S+ 14:40 0:00 grep --color=auto test_mem
ubuntu@my_machine:~$ ps -aux | grep test_mem
Warning: bad ps syntax, perhaps a bogus '-'? See
ubuntu 9122 10.0 6.0 270916 245564 pts/1 S+ 14:39 0:03 python test_mem.py
ubuntu 9134 0.0 0.0 8104 924 pts/2 S+ 14:40 0:00 grep --color=auto test_mem
ubuntu@my_machine:~$ ps -aux | grep test_mem
Warning: bad ps syntax, perhaps a bogus '-'? See
ubuntu 9122 11.6 0.1 30956 5608 pts/1 S+ 14:39 0:05 python test_mem.py
結論:
以上說明,當調用del時,其實Python並不會真正release內存,而是將其繼續放在其內存池中;只有在顯式調用gc.collect()時,才會真正release內存。
進一步:
其實回到上一篇博客的腳本中,也讓其引入gc.collect(),然後寫個監控腳本監測內存消耗情況:
[plain] view plain
while ((1)); do ps -aux | sort -n -k5,6 | grep my_script; free; sleep 5; done
結果發現:內存並不會在每500個用戶一組執行完後恢復,而是一直持續消耗到僅存約70MB時,gc才好像起作用。本環境中,機器使用的是Cloud instance,總內存2G,可用內存約為1G,本腳本內存常用消耗是900M - 1G。換句話說,對於這個腳本來說,gc並沒有立即起作用,而是在系統可用內存從1 - 1.2G下降到只剩70M左右時,gc才開始發揮作用。這點確實比較奇怪,不知道和該腳本是在Thread中使用的gc.collect()是否有關,或者是gc發揮作用原本就不是可控的。筆者尚未做相關實驗,可能在下篇博客中繼續探討。
但是,可以肯定的是,若不使用gc.collect(), 原腳本將會將系統內存耗盡而被殺死。這一點從syslog中可以明顯看出。
㈦ c如何調用python程序
C語言如何調用python,相關步驟如下:
首先,C語言中調用python,要使用頭文件Python.h。
2、接著,定義一個調用python的函數。
相關推薦:《Python教程》
3、函數中,設置python庫的路徑。
4、然後,初始化python。
5、運行一個python代碼,輸出How are you。
6、最後,釋放python。
㈧ 如何手動釋放Python的內存
象的引用計數減少;
函數運行結束,所有局部變數都被銷毀,對象的引用計數也就隨之減少。例如 foo(x) 運行結束,x 被銷毀;
當變數被賦值給另一個對象時,原對象的引用計數也會減少。例如 x = 4,這時候 3 這個對象的引用計數就減 1 了;
使用 del 刪除一個變數也會導致對象引用減少。例如 del x;
對象從集合對象中移除。例如 lst.remove(x);
包含對象的集合對象被銷毀。例如 del lst;
這些操作都可能使對象變成垃圾回收對象,由垃圾收集器負責收集,當然垃圾收集器也負責處理循環引用對象。
要立即釋放,可以使用下面的代碼
import gc
gc.collect()
㈨ 退出python程序釋放佔用內存
一般情況下不會占內存,而且Python的內存需要的很小。如果用模擬器的話需要退出一下,輸入close就可以了。請採納,謝謝。