首页 > 解决方案 > 如何阻止 Python 程序不断增加内存使用量?

问题描述

我创建了一个小程序来测量我的 4g 数据消耗,它运行良好......除了一个部分。

运行了一整天后,我听到我的电脑发出了我从未听过的声音,所以当我去我的任务管理器时,我惊讶地发现了一个使用 3GB RAM 的 Python 程序。我停止了程序并重新运行它。它从消耗 20 Mb 的 RAM 开始,并且越来越高。

我尝试使用垃圾收集器来(释放)每次返回的值,但这并没有帮助,因为返回值是float. 我确实尝试将其投射到int没有成功。

import time
import threading
from tkinter import *
import psutil
import socket
import gc

def running_processes():
    for proc in psutil.process_iter():
        try:
            # Get process name & pid from process object.
            processName = proc.name()
            processID = proc.pid
            print(processName , ' ::: ', processID)
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass

def data(start_val):
    # Returns the data consumed while connected
    start_val = 0
    result = 0
    global timer

    while True:
        current_val = psutil.net_io_counters().bytes_sent + psutil.net_io_counters().bytes_recv
        result = current_val - start_val + result
        start_val = current_val
        timer = threading.Timer(1.0, data)
        timer.start()
        timer.cancel()
        return convert_to_mo(result)

def main():
    # Runs and displays data
    kiss = data(0)
    display_label['text'] = str(kiss) + ' || Mo Consumed '
    display_label.pack()
    app.after(5, main)
    #gc.collect(kiss)

def convert_to_mo(value):
    # 1 octet = 1 byte = 8 bits // 1024 bytes = 8192 bits = 1 kb;
    return value/1000000

app = Tk()
app.title("Data Consumption Monitor")
app.geometry('420x40')
app.configure(background = 'black')
frame = Frame(app)
display_label = Label(frame, font = 'montserrat 20', bg = 'black', fg = '#20C20E')
frame.pack(anchor=CENTER)
running_processes()
main()
app.mainloop()

标签: pythonmultithreadingram

解决方案


推荐阅读