我正在做一个阻止某些应用程序打开的程序。 但它使用了大量的CPU。 因为程序总是试图终止该应用程序。我希望这个程序使用更少的CPU。我怎么能这样做?
PS :我无法在2小时内达到此结果。
我的Python版本: 3.6.3
我不想要任何第三方模块。
我使用大量CPU的代码:
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
while True:
subprocess.call("taskkill /F /IM chrome.exe", startupinfo=si)
subprocess.call("taskkill /F /IM opera.exe", startupinfo=si)
subprocess.call("taskkill /F /IM iexplore.exe", startupinfo=si)
subprocess.call("taskkill /F /IM firefox.exe", startupinfo=si)
sleep(1)
答案 0 :(得分:1)
如果你坚持没有第三方模块(并且我认为win32api在Windows上运行时应该附带Python),你至少可以将大部分工作抵消到使用Win32 API的系统试图通过Python做一切。以下是我的表现:
import subprocess
import time
# list of processes to auto-kill
kill_list = ["chrome.exe", "opera.exe", "iexplore.exe", "firefox.exe"]
# WMI command to search & destroy the processes
wmi_command = "wmic process where \"{}\" delete\r\n".format(
" OR ".join("Name='{}'".format(e) for e in kill_list))
# run a single subprocess with Windows Command Prompt
proc = subprocess.Popen(["cmd.exe"], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
while True:
proc.stdin.write(wmi_command.encode("ascii")) # issue the WMI command to it
proc.stdin.flush() # flush the STDIN buffer
time.sleep(1) # let it breathe a little
在大多数情况下,您甚至都不会注意到这一点对性能的影响。
现在,为什么你首先需要这样一个东西是一个完全不同的主题 - 我认为这样的剧本没有现实世界的使用。
答案 1 :(得分:0)
也许使用psutil更快:
import psutil
for process in psutil.process_iter():
if process.name() == 'myprocess':
process.kill()