當前位置:首頁 » 編程語言 » python進程佔用內存

python進程佔用內存

發布時間: 2023-08-24 22:47:38

python 最大能用多大內存

最大能用多大內存是操作系統的限制,跟python沒有直接關系,因為python是沒有限制的。

ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC 這種語言非常優美和強大,是專門為非專業程序員設計的。但是ABC語言並沒有成功,究其原因,Guido 認為是其非開放造成的。Guido 決心在Python 中避免這一錯誤。同時,他還想實現在ABC 中閃現過但未曾實現的東西。

(1)python進程佔用內存擴展閱讀:

一個和其他大多數語言(如C)的區別就是,一個模塊的界限,完全是由每行的首字元在這一行的位置來決定的(而C語言是用一對花括弧{}來明確的定出模塊的邊界的,與字元的位置毫無關系)。這一點曾經引起過爭議。

因為自從C這類的語言誕生後,語言的語法含義與字元的排列方式分離開來,曾經被認為是一種程序語言的進步。不過不可否認的是,通過強製程序員們縮進(包括if,for和函數定義等所有需要使用模塊的地方),Python確實使得程序更加清晰和美觀。

⑵ Python 多進程內存佔用問題

當我們有一個很長很長的任務隊列(mission_list)和閾值對應的一個處理函數(missionFunction)時,我們一般採用如下的方式進行處理:

但是,如果這任務列表很長很長,處理函數很復雜(佔用cpu)時,單核往往需要很長的時間進行處理,此時,Multiprocess便可以極大的提高我們程序的運行速度,相關內容請借鑒 multiprocessing --- 基於進程的並行 — Python 3.10.4 文檔。

以上這種場景下,推薦大家採用最簡單的進程池+map的方法進行處理,標準的寫法, chunksize要借鑒官方的說法,最好大一點

但是!!!! 如果我們的任務列表非常的長,這會導致多進程還沒跑起來之前,內存已經撐爆了,任務自然沒法完成,此時我們有幾種辦法進行優化:

進程的啟動方法有三種,可參考官方文檔:

[圖片上傳失敗...(image-48cd3c-1650511153989)]

linux環境下,使用forkserver可以節省很多的內存空間, 因為進程啟動的是一個服務,不會把主進程的數據全部復制

採用imap會極大的節省空間,它返回的是一個迭代器,也就是結果列表:

但注意,以上寫法中,你寫的結果迭代部分必須寫在with下面。或者採用另一種寫法:

還有最後一種,當你的mission list實在太大了,導致你在生成 mission list的時候已經把內存撐爆了,這個時候就得優化 mission_list了,如果你的mission_list是通過一個for循環生成的,你可以使用yield欄位,將其封裝為一個迭代器,傳入進程池:

這樣子,我們就封裝好了mission_list,它是一個可迭代對象,在取數據的時候才會將數據拉到內存

我在項目中結合了後兩種方法,原本256G的內存都不夠用,但在修改後內存只佔用了不到10G。希望能夠幫助到你

⑶ 7種檢測Python程序運行時間、CPU和內存佔用的方法

1. 使用裝飾器來衡量函數執行時間

有一個簡單方法,那就是定義一個裝飾器來測量函數的執行時間,並輸出結果:

import time

from functoolsimport wraps

import random

def fn_timer(function):

  @wraps(function)

  def function_timer(*args, **kwargs):

      t0= time.time()

      result= function(*args, **kwargs)

      t1= time.time()

      print("Total time running %s: %s seconds" %

          (function.__name__, str(t1- t0))

)

      return result

return function_timer

@fn_timer

def random_sort(n):

  return sorted([random.random() for i in range(n)])

if __name__== "__main__":

  random_sort(2000000)

輸出:Total time running random_sort: 0.6598007678985596 seconds

使用方式的話,就是在要監控的函數定義上面加上 @fn_timer 就行了

或者

# 可監控程序運行時間

import time

import random

def clock(func):

    def wrapper(*args, **kwargs):

        start_time= time.time()

        result= func(*args, **kwargs)

        end_time= time.time()

        print("共耗時: %s秒" % round(end_time- start_time, 5))

        return result

return wrapper

@clock

def random_sort(n):

  return sorted([random.random() for i in range(n)])

if __name__== "__main__":

  random_sort(2000000)

輸出結果:共耗時: 0.65634秒

2. 使用timeit模塊

另一種方法是使用timeit模塊,用來計算平均時間消耗。

執行下面的腳本可以運行該模塊。

這里的timing_functions是Python腳本文件名稱。

在輸出的末尾,可以看到以下結果:4 loops, best of 5: 2.08 sec per loop

這表示測試了4次,平均每次測試重復5次,最好的測試結果是2.08秒。

如果不指定測試或重復次數,默認值為10次測試,每次重復5次。

3. 使用Unix系統中的time命令

然而,裝飾器和timeit都是基於Python的。在外部環境測試Python時,unix time實用工具就非常有用。

運行time實用工具:

輸出結果為:

Total time running random_sort: 1.3931210041 seconds

real 1.49

user 1.40

sys 0.08

第一行來自預定義的裝飾器,其他三行為:

    real表示的是執行腳本的總時間

    user表示的是執行腳本消耗的CPU時間。

    sys表示的是執行內核函數消耗的時間。

注意:根據維基網路的定義,內核是一個計算機程序,用來管理軟體的輸入輸出,並將其翻譯成CPU和其他計算機中的電子設備能夠執行的數據處理指令。

因此,Real執行時間和User+Sys執行時間的差就是消耗在輸入/輸出和系統執行其他任務時消耗的時間。

4. 使用cProfile模塊

5. 使用line_profiler模塊

6. 使用memory_profiler模塊

7. 使用guppy包

⑷ python 最大能用多大存儲空間

這個是操作系統的限制,跟python沒有直接關系,因為python是沒有限制的。
32位的系統:windows下單個進程可以用到2G內存;linux下單個進程可以用到4G內存。
64位的系統:
windows下單個進程Intel Itanium-based可用到7TB,Windows 8.1和Windows Server 2012
R2:可用128,其它版本TBx64: 8 TB
但是不同版本windows系統可用的最大物理內存數也有限制,比如64位win7家庭基本版只能認出8G內存,專業版以上能認出192G內存。
linux下不同的發行商,或者不同的內核編譯參數也會有也不同的限制,但都是按T計的。

熱點內容
讓linux死機 發布:2025-02-04 20:48:08 瀏覽:138
單方塊生存伺服器里如何獲取岩漿 發布:2025-02-04 20:48:07 瀏覽:782
快速指數演算法 發布:2025-02-04 20:20:40 瀏覽:298
python在類中定義函數調用函數 發布:2025-02-04 20:14:47 瀏覽:595
安卓手機的壁紙是哪個 發布:2025-02-04 20:14:44 瀏覽:199
java發展前景 發布:2025-02-04 20:10:19 瀏覽:76
mac登陸密碼哪裡設置 發布:2025-02-04 19:50:20 瀏覽:525
手游腳本封號 發布:2025-02-04 19:42:12 瀏覽:435
玩單機游戲要哪些配置的電腦 發布:2025-02-04 19:17:41 瀏覽:1003
c語言編程圖書 發布:2025-02-04 19:01:52 瀏覽:898