Как снизить нагрузку на пк при запуске скрипта 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()