[英]python read() and write() in large blocks / memory management
我正在編寫一些python代碼,在不同的點拼接大文件。 我在C中做了類似的事情,我分配了一個1MB字符數組並將其用作讀/寫緩沖區。 它非常簡單:將1MB讀入char數組然后將其寫出來。
但是使用python我假設它是不同的,每次我調用size(1M)的read()時,它將分配一個1M長的字符串。 並且希望當緩沖區超出范圍時,我們將在下一個gc傳遞中釋放。
python會以這種方式處理分配嗎? 如果是這樣,常量分配/解除分配周期在計算上是否昂貴?
我可以告訴python使用與C中相同的內存塊嗎? 或者python vm足夠智能自己做嗎?
我想我的目標是有點像在python中實現dd。
搜索站點docs.python.org以獲取readinto
以查找適合您正在使用的Python版本的文檔。 readinto
是一個低級功能。 它們看起來很像這樣:
readinto(b)將len(b)字節讀入bytearray b並返回讀取的字節數。
與read()一樣,可以向底層原始流發出多個讀取,除非后者是交互式的。
如果基礎原始流處於非阻塞模式,並且此刻沒有可用數據,則會引發BlockingIOError。
但不要過早擔心它。 Python以凶猛的速度分配和釋放動態內存,並且可能會在噪聲中丟失重復獲取和釋放微弱兆字節的成本。 請注意,CPython主要是引用計數,因此當它超出范圍時,您的緩沖區將立即“立即”回收。 至於Python每次是否會重復使用相同的內存空間,可能性不大但不確定。 Python沒有做任何事情來試圖強迫它,但取決於整個分配/釋放模式和系統C的malloc()/free()
實現的細節,它不是不可能它將被重用;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.