Как снизить нагрузку на пк при запуске скрипта Python

В теме Как получить пути до всех папок, существующих на компьютере мне помогли написать скрипт, вот итоговый код:

import glob
import os
from win32api import GetLogicalDriveStrings
from os import walk

os.system(f'title UPX Soft by httpshotmaker')

print(
    '  __    __  .______   ___   ___         _______.  ______    _______ .___________.\n',
    '|  |  |  | |   _  \  \  \ /  /        /       | /  __  \  |   ____||           |\n',
    '|  |  |  | |  |_)  |  \  V  /        |   (----`|  |  |  | |  |__   `---|  |----`\n',
    '|  |  |  | |   ___/    >   <          \   \    |  |  |  | |   __|      |  |     \n',
    "|  `--'  | |  |       /  .  \     .----)   |   |  `--'  | |  |         |  |     \n",
    ' \______/  | _|      /__/ \__\    |_______/     \______/  |__|         |__|     \n'
    )

path = [root for drive in GetLogicalDriveStrings().split('\000')[:-1] for root, _, _ in walk(drive)]
targetPattern = rf"{path}\*.exe"

for soft in glob.glob(targetPattern):
    os.system(f'upx --best "{soft}"')
    try:
        os.system('clear')
    except:
        os.system('cls')

Но в чем проблема: при запуске диски нагружаются на 100% и все зависает намертво. Как я могу снизить нагрузку на диски? Готов потратить больше времени на исполнение скрипта, главное чтобы комп не дох


Ответы (2 шт):

Автор решения: CrazyElf

Попробуйте добавить задержку в цикл:

import time

...
for soft in glob.glob(targetPattern):
    time.sleep(0.05) # числом можно поиграться
    ...

Больше задержка - меньше нагрузка на диск. Но насколько это будет равномерно - сказать сложно.

Чтобы добавить задержку в первый цикл path = [root for drive... перепишите это списковое сокращение в обычный цикл:

path = []
for drive in GetLogicalDriveStrings().split('\000')[:-1]:
    for root, _, _ in walk(drive):
        path.append(root)
        time.sleep(0.05)
→ Ссылка
Автор решения: root

Я изменил следующий код:

[root for drive in GetLogicalDriveStrings().split('\000')[:-1] for root, _, _ in walk(drive)]

На этот:

for drive in GetLogicalDriveStrings().split('\000')[:-1]:
    sleep(drv) #Уход в сон при смене диска
    for root, _, _ in walk(drive):
        sleep(fol) #Уход в сон каждую новую папку
        os.system(f'title UPX Soft by httpshotmaker')
        root = "".join(root)
        targetPattern = rf"{root}\*.exe"
        soft = glob.glob(targetPattern)
        if soft == list():
            continue
        if f'{os.getenv("SystemDrive")}\\Windows' in root or f'{os.getenv("SystemDrive")}\\$Recycle.Bin' in root or f'{os.getenv("SystemDrive")}\\Program Files' in root or f'{os.getenv("SystemDrive")}\\Program Files (x86)' in root or f'{os.getenv("SystemDrive")}\\PerfLogs' in root:
            continue
        i += 1
        os.system(f'title Folders found: {i}')
        for j in soft:
            clean()
            banner()
            os.system(f'upx --best "{j}"')
            os.system(f'title Working with {j}...')
        clean()
        banner()
→ Ссылка