国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案

Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案

2021-11-13 10:44ON_THE_WAY_FOREVER Python

這篇文章主要介紹了Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

看代碼吧~

?
1
2
3
4
5
import gc
for x in list(locals().keys())[:]:
    del locals()[x]
# del all_s_x, ae, ae_split, x_ticks, split
gc.collect()

補充:python讀取大文件的"坑“與內(nèi)存占用檢測

python讀寫文件的api都很簡單,一不留神就容易踩”坑“。筆者記錄一次踩坑歷程,并且給了一些總結(jié),希望到大家在使用python的過程之中,能夠避免一些可能產(chǎn)生隱患的代碼。

1.read()與readlines():

隨手搜索python讀寫文件的教程,很經(jīng)常看到read()與readlines()這對函數(shù)。所以我們會常常看到如下代碼:

?
1
2
with open(file_path, 'rb') as f:
    sha1obj.update(f.read())

or

?
1
2
3
with open(file_path, 'rb') as f:
    for line in f.readlines():
        print(line)

這對方法在讀取小文件時確實不會產(chǎn)生什么異常,但是一旦讀取大文件,很容易會產(chǎn)生memoryerror,也就是內(nèi)存溢出的問題。

why memory error?

我們首先來看看這兩個方法:

當(dāng)默認參數(shù)size=-1時,read方法會讀取直到eof,當(dāng)文件大小大于可用內(nèi)存時,自然會發(fā)生內(nèi)存溢出的錯誤。

Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案

同樣的,readlines會構(gòu)造一個list。list而不是iter,所以所有的內(nèi)容都會保存在內(nèi)存之上,同樣也會發(fā)生內(nèi)存溢出的錯誤。

Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案

2.正確的用法:

在實際運行的系統(tǒng)之中如果寫出上述代碼是十分危險的,這種”坑“十分隱蔽。所以接下來我們來了解一下正確用,正確的用法也很簡單,依照api之中對函數(shù)的描述來進行對應(yīng)的編碼就ok了:

如果是二進制文件推薦用如下這種寫法,可以自己指定緩沖區(qū)有多少byte。顯然緩沖區(qū)越大,讀取速度越快。

?
1
2
3
4
5
6
7
with open(file_path, 'rb') as f:
    while true:
        buf = f.read(1024)
        if buf:   
            sha1obj.update(buf)
        else:
            break

而如果是文本文件,則可以用readline方法或直接迭代文件(python這里封裝了一個語法糖,二者的內(nèi)生邏輯一致,不過顯然迭代文件的寫法更pythonic )每次讀取一行,效率是比較低的。筆者簡單測試了一下,在3g文件之下,大概性能和前者差了20%.

?
1
2
3
4
5
6
7
8
9
10
with open(file_path, 'rb') as f:
    while true:
        line = f.readline()
        if buf:   
            print(line)
        else:
            break
with open(file_path, 'rb') as f:
    for line in f:
        print(line)

3.內(nèi)存檢測工具的介紹:

對于python代碼的內(nèi)存占用問題,對于代碼進行內(nèi)存監(jiān)控十分必要。這里筆者這里推薦兩個小工具來檢測python代碼的內(nèi)存占用。

?
1
memory_profiler

首先先用pip安裝memory_profiler

?
1
pip install memory_profiler

memory_profiler是利用python的裝飾器工作的,所以我們需要在進行測試的函數(shù)上添加裝飾器。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from hashlib import sha1
import sys
@profile
def my_func():
    sha1obj = sha1()
    with open(sys.argv[1], 'rb') as f:
        while true:
            buf = f.read(10 * 1024 * 1024)
            if buf:
                sha1obj.update(buf)
            else:
                break
    print(sha1obj.hexdigest())
if __name__ == '__main__':
    my_func()

之后在運行代碼時加上** -m memory_profiler**

就可以了解函數(shù)每一步代碼的內(nèi)存占用了

Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案

guppy

依樣畫葫蘆,仍然是通過pip先安裝guppy

?
1
pip install guppy

之后可以在代碼之中利用guppy直接打印出對應(yīng)各種python類型(list、tuple、dict等)分別創(chuàng)建了多少對象,占用了多少內(nèi)存。

?
1
2
3
4
5
6
7
8
9
10
11
from guppy import hpy
import sys
def my_func():
    mem = hpy()
    with open(sys.argv[1], 'rb') as f:
        while true:
            buf = f.read(10 * 1024 * 1024)
            if buf:
                print(mem.heap())
            else:
                break

如下圖所示,可以看到打印出對應(yīng)的內(nèi)存占用數(shù)據(jù):

Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案

通過上述兩種工具guppy與memory_profiler可以很好地來監(jiān)控python代碼運行時的內(nèi)存占用問題。

4.小結(jié):

python是一門崇尚簡潔的語言,但是正是因為它的簡潔反而更多了許多需要仔細推敲和思考的細節(jié)。希望大家在日常工作與學(xué)習(xí)之中也能多對一些細節(jié)進行總結(jié),少踩一些不必要的“坑”。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/weixin_41888257/article/details/107919638

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: h视频免费观看 | 国产午夜小视频 | 亚洲天堂一区 | av有声小说一区二区三区 | 精品国产91乱码一区二区三区 | 欧美精品在线一区 | 国产永久免费在线观看 | www.you日本 | 亚洲精品久久久久久下一站 | 激情免费视频 | 日本一区二区三区精品视频 | 九九资源站 | 成人免费激情视频 | 亚洲欧美日韩精品久久亚洲区 | 国产成人精品一区二区三区视频 | 日本做暖暖视频高清观看 | 8888色大全 | 四虎av成人 | 91 在线| 久久久久久综合 | 国产视频久久 | 久久久五月天 | 亚洲精品久久久久久久久久久 | 亚洲人人| 黄色影院 | 国产美女一区二区三区 | 欧美日韩网站 | 九九国产精品视频 | 成人午夜影院 | 黄视频免费观看 | 国产在线一区二区 | 久久av综合 | 久久久久久久一区 | 国产精品成av人在线视午夜片 | 日韩成人免费av | 日本一区二区三区精品视频 | 国产精品免费看片 | 国产精品伊人影院 | 久久精品国产99国产精品 | 激情一区二区三区 | av片网站|