最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python編寫個自用的內(nèi)存清理工具

 更新時間:2025年02月17日 08:43:27   作者:mosquito_lover1  
自己電腦經(jīng)常內(nèi)存飆升卻不知道是什么進程引起的,但是按傳統(tǒng)辦法點開任務(wù)管理器去排個序來查看太發(fā)麻了,所以本文就來用Python編寫一個內(nèi)存清理工具吧

開發(fā)背景

自己電腦經(jīng)常內(nèi)存飆升卻不知道是什么進程引起的,按傳統(tǒng)辦法是要點開任務(wù)管理器去排個序來查看下,有時還要點開文件位置再確認(rèn)一下,覺得麻煩。 于是干脆用Python寫一個,很實用!

功能特點

內(nèi)存清理信息:清理前和清理后的內(nèi)存使用總和。

進程列表:顯示所有進程的 PID、名稱、內(nèi)存使用和文件位置。點擊列名可以對該列進行排序。

功能按鈕:清理內(nèi)存”:清理內(nèi)存并更新內(nèi)存使用信息。“刷新進程列表”:重新加載進程列表并更新內(nèi)存使用信息。“結(jié)束進程”:彈出確認(rèn)對話框,用戶確認(rèn)后結(jié)束選中的進程。“導(dǎo)出進程列表”:將當(dāng)前進程列表導(dǎo)出為 CSV 文件。

新進程提醒:如果有新進程啟動,會彈窗顯示進程的名稱、PID 和文件位置。

工具截圖

完整代碼

import os
import psutil
import ctypes
import sys
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import csv
import time
import threading
 
# 檢查并提升管理員權(quán)限
def run_as_admin():
    if sys.platform != 'win32':
        return False
 
    try:
        if ctypes.windll.shell32.IsUserAnAdmin():
            return True
    except:
        pass
 
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
    sys.exit()
 
# 獲取所有進程信息
def get_processes():
    processes = []
    for proc in psutil.process_iter(['pid', 'name', 'memory_info', 'exe']):
        try:
            processes.append((proc.info['pid'], proc.info['name'], proc.info['memory_info'].rss, proc.info['exe']))
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            continue
    return processes
 
# 計算所有進程的內(nèi)存使用總和
def get_total_memory_usage():
    total_memory = 0
    for proc in psutil.process_iter(['memory_info']):
        try:
            total_memory += proc.info['memory_info'].rss
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            continue
    return total_memory
 
# 結(jié)束選中的進程
def kill_process():
    selected_item = process_tree.selection()
    if not selected_item:
        messagebox.showwarning("警告", "請選擇一個進程!")
        return
 
    pid = int(process_tree.item(selected_item, 'values')[0])
    process_name = process_tree.item(selected_item, 'values')[1]
 
    # 確認(rèn)對話框
    confirm = messagebox.askyesno("確認(rèn)", f"確定要結(jié)束進程 {process_name} (PID: {pid}) 嗎?")
    if not confirm:
        return
 
    try:
        process = psutil.Process(pid)
        process.terminate()
        messagebox.showinfo("成功", f"進程 {process_name} (PID: {pid}) 已結(jié)束!")
        refresh_processes()
    except Exception as e:
        messagebox.showerror("錯誤", f"結(jié)束進程時出錯: {e}")
 
# 刷新進程列表
def refresh_processes():
    for row in process_tree.get_children():
        process_tree.delete(row)
    processes = get_processes()
    for proc in processes:
        process_tree.insert("", "end", values=proc)
 
    # 更新內(nèi)存使用信息
    update_memory_usage()
 
# 更新內(nèi)存使用信息
def update_memory_usage():
    total_memory = get_total_memory_usage()
    memory_before.set(f"清理前內(nèi)存使用: {total_memory / 1024 / 1024:.2f} MB")
    memory_after.set(f"清理后內(nèi)存使用: {total_memory / 1024 / 1024:.2f} MB")
 
# 內(nèi)存清理功能
def clear_memory():
    try:
        # 獲取清理前的內(nèi)存使用總和
        before_memory = get_total_memory_usage()
 
        # 釋放未使用的內(nèi)存
        ctypes.windll.psapi.EmptyWorkingSet(ctypes.c_ulong(-1))
 
        # 獲取清理后的內(nèi)存使用總和
        after_memory = get_total_memory_usage()
 
        # 更新界面顯示
        memory_before.set(f"清理前內(nèi)存使用: {before_memory / 1024 / 1024:.2f} MB")
        memory_after.set(f"清理后內(nèi)存使用: {after_memory / 1024 / 1024:.2f} MB")
        messagebox.showinfo("成功", "內(nèi)存清理完成!")
    except Exception as e:
        messagebox.showerror("錯誤", f"清理內(nèi)存時出錯: {e}")
 
# 導(dǎo)出進程列表為 CSV 文件
def export_processes():
    file_path = filedialog.asksaveasfilename(
        defaultextension=".csv",
        filetypes=[("CSV 文件", "*.csv"), ("所有文件", "*.*")],
        title="保存進程列表"
    )
    if not file_path:
        return
 
    try:
        with open(file_path, mode="w", newline="", encoding="utf-8") as file:
            writer = csv.writer(file)
            # 寫入表頭
            writer.writerow(["PID", "進程名", "內(nèi)存使用 (MB)", "文件位置"])
            # 寫入進程數(shù)據(jù)
            for row in process_tree.get_children():
                values = process_tree.item(row, 'values')
                writer.writerow(values)
        messagebox.showinfo("成功", f"進程列表已導(dǎo)出到 {file_path}")
    except Exception as e:
        messagebox.showerror("錯誤", f"導(dǎo)出進程列表時出錯: {e}")
 
# 排序函數(shù)
def treeview_sort_column(tv, col, reverse):
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    try:
        l.sort(key=lambda t: int(t[0]) if col == "memory" else t[0], reverse=reverse)
    except ValueError:
        l.sort(reverse=reverse)
 
    for index, (val, k) in enumerate(l):
        tv.move(k, '', index)
 
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))
 
# 監(jiān)控新進程
def monitor_new_processes():
    global previous_processes
 
    while True:
        current_processes = get_processes()
        current_pids = {proc[0] for proc in current_processes}
        previous_pids = {proc[0] for proc in previous_processes}
 
        # 檢查新進程
        new_pids = current_pids - previous_pids
        if new_pids:
            for proc in current_processes:
                if proc[0] in new_pids:
                    messagebox.showinfo(
                        "新進程提醒",
                        f"新進程已啟動:\n\n"
                        f"進程名: {proc[1]}\n"
                        f"PID: {proc[0]}\n"
                        f"文件位置: {proc[3]}"
                    )
 
        previous_processes = current_processes
        time.sleep(5)  # 每 5 秒檢查一次
 
# 創(chuàng)建主窗口
def create_gui():
    global memory_before, memory_after, process_tree, previous_processes
 
    root = tk.Tk()
    root.title("內(nèi)存清理工具")
    root.geometry("800x600")
 
    # 初始化進程列表
    previous_processes = get_processes()
 
    # 啟動新進程監(jiān)控線程
    monitor_thread = threading.Thread(target=monitor_new_processes, daemon=True)
    monitor_thread.start()
 
    # 標(biāo)題
    title_label = tk.Label(root, text="Windows 內(nèi)存清理工具", font=("Arial", 16))
    title_label.pack(pady=10)
 
    # 內(nèi)存信息顯示
    memory_before = tk.StringVar()
    memory_after = tk.StringVar()
 
    memory_before.set("清理前內(nèi)存使用: N/A")
    memory_after.set("清理后內(nèi)存使用: N/A")
 
    before_label = tk.Label(root, textvariable=memory_before, font=("Arial", 12))
    before_label.pack(pady=5)
 
    after_label = tk.Label(root, textvariable=memory_after, font=("Arial", 12))
    after_label.pack(pady=5)
 
    # 清理內(nèi)存按鈕
    clear_button = tk.Button(root, text="清理內(nèi)存", command=clear_memory, font=("Arial", 14), bg="lightblue")
    clear_button.pack(pady=10)
 
    # 進程列表
    process_frame = tk.Frame(root)
    process_frame.pack(fill="both", expand=True, padx=10, pady=10)
 
    columns = ("pid", "name", "memory", "exe")
    process_tree = ttk.Treeview(process_frame, columns=columns, show="headings")
    process_tree.heading("pid", text="PID", command=lambda: treeview_sort_column(process_tree, "pid", False))
    process_tree.heading("name", text="進程名", command=lambda: treeview_sort_column(process_tree, "name", False))
    process_tree.heading("memory", text="內(nèi)存使用 (MB)", command=lambda: treeview_sort_column(process_tree, "memory", False))
    process_tree.heading("exe", text="文件位置", command=lambda: treeview_sort_column(process_tree, "exe", False))
 
    process_tree.column("pid", width=100, anchor="center")
    process_tree.column("name", width=200, anchor="w")
    process_tree.column("memory", width=150, anchor="center")
    process_tree.column("exe", width=300, anchor="w")
 
    process_tree.pack(fill="both", expand=True)
 
    # 刷新進程列表按鈕
    refresh_button = tk.Button(root, text="刷新進程列表", command=refresh_processes, font=("Arial", 12), bg="lightgreen")
    refresh_button.pack(pady=10)
 
    # 結(jié)束進程按鈕
    kill_button = tk.Button(root, text="結(jié)束進程", command=kill_process, font=("Arial", 12), bg="lightcoral")
    kill_button.pack(pady=10)
 
    # 導(dǎo)出進程列表按鈕
    export_button = tk.Button(root, text="導(dǎo)出進程列表", command=export_processes, font=("Arial", 12), bg="lightyellow")
    export_button.pack(pady=10)
 
    # 初始化進程列表和內(nèi)存使用信息
    refresh_processes()
 
    root.mainloop()
 
if __name__ == "__main__":
    run_as_admin()
    create_gui()

代碼說明

1.monitor_new_processes:

這是一個后臺線程函數(shù),每 5 秒檢查一次系統(tǒng)進程列表。

如果發(fā)現(xiàn)新進程,彈窗顯示進程的名稱、PID 和文件位置。

2.get_processes:

獲取所有進程的信息,包括 PID、名稱、內(nèi)存使用和文件位置。

3.previous_processes:

用于存儲上一次檢查時的進程列表,以便與新進程列表進行比較。

4.threading.Thread:

使用線程運行 monitor_new_processes,避免阻塞主界面。

到此這篇關(guān)于基于Python編寫個自用的內(nèi)存清理工具的文章就介紹到這了,更多相關(guān)Python內(nèi)存清理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中線程編程之threading模塊的使用詳解

    Python中線程編程之threading模塊的使用詳解

    這篇文章主要介紹了Python中線程編程之threading模塊的使用詳解,由于GIL的存在,線程一直是Python編程中的焦點問題,需要的朋友可以參考下
    2015-06-06
  • Python實現(xiàn)的多項式擬合功能示例【基于matplotlib】

    Python實現(xiàn)的多項式擬合功能示例【基于matplotlib】

    這篇文章主要介紹了Python實現(xiàn)的多項式擬合功能,結(jié)合實例形式分析了Python基于matplotlib模塊進行數(shù)值運算與圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • 利用python循環(huán)創(chuàng)建多個文件的方法

    利用python循環(huán)創(chuàng)建多個文件的方法

    今天小編就為大家分享一篇利用python循環(huán)創(chuàng)建多個文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python+OpenCV感興趣區(qū)域ROI提取方法

    Python+OpenCV感興趣區(qū)域ROI提取方法

    今天小編就為大家分享一篇Python+OpenCV感興趣區(qū)域ROI提取方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python使用opencv進行人臉識別

    python使用opencv進行人臉識別

    本文主要介紹了python使用opencv進行人臉識別的相關(guān)資料。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • 結(jié)合Python網(wǎng)絡(luò)爬蟲做一個今日新聞小程序

    結(jié)合Python網(wǎng)絡(luò)爬蟲做一個今日新聞小程序

    本篇文章介紹了我在開發(fā)過程中遇到的一個問題,以及解決該問題的過程及思路,通讀本篇對大家的學(xué)習(xí)或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09
  • Python中的類屬性與實例屬性的區(qū)別和用法

    Python中的類屬性與實例屬性的區(qū)別和用法

    在Python中,類屬性和實例屬性是面向?qū)ο缶幊痰暮诵母拍钪?它們允許存儲和管理對象的數(shù)據(jù),并影響對象的行為,本篇文章中,會學(xué)習(xí)到類屬性和實例屬性的概念、區(qū)別以及如何在Python中使用它們,同時提供大量的示例代碼來更好地理解它們的作用和用法,需要的朋友可以參考下
    2023-11-11
  • Python NLP進階之jieba中文分詞的完整教程

    Python NLP進階之jieba中文分詞的完整教程

    在人工智能快速發(fā)展的今天,jieba中文分詞已經(jīng)成為每個AI從業(yè)者必須掌握的核心技能,本文將深入講解自然語言處理中的jieba中文分詞技術(shù),希望對大家有所幫助
    2026-05-05
  • Python matplotlib畫圖與中文設(shè)置操作實例分析

    Python matplotlib畫圖與中文設(shè)置操作實例分析

    這篇文章主要介紹了Python matplotlib畫圖與中文設(shè)置操作,結(jié)合實例形式分析了Python使用matplotlib進行圖形繪制及中文設(shè)置相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • 用python寫爬蟲簡單嗎

    用python寫爬蟲簡單嗎

    在本篇內(nèi)容里小編給大家整理的是關(guān)于用python寫爬蟲是否簡單的相關(guān)內(nèi)容文章,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07

最新評論

剑川县| 瑞昌市| 新和县| 崇仁县| 眉山市| 会昌县| 楚雄市| 辽阳县| 九江县| 思南县| 鹤岗市| 凤山市| 禹城市| 进贤县| 汉阴县| 绵竹市| 鞍山市| 新乡县| 商南县| 韶山市| 贞丰县| 登封市| 商都县| 海南省| 台江县| 城步| 麻江县| 郎溪县| 侯马市| 南皮县| 且末县| 黄梅县| 和硕县| 满城县| 思南县| 庆城县| 余江县| 安岳县| 靖江市| 龙泉市| 鹿邑县|