2017-12-10 8 views
0

私は、特定のアプリケーションが開かないようにするプログラムを作成しています。 しかし、多くのCPUを使用しています。 プログラムは常にそのアプリケーションを終了しようとしているためです。このプログラムでCPUの使用量を少なくしたいと思っています。これどうやってするの?プロセスがPythonで動作しているかどうかをチェックするには?

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) 
+1

Win32APIを使用して定期的にタスクリストを取得し、タスクリストを検索して、目的のプロセスが表示された場合はそれらを削除します。 [この回答](https://stackoverflow.com/questions/44008243/tasklist-command-with-description/44058799#44058799)の例を見ることができます(最後の例は、タスクの詳細を取得するステップです)。 – zwer

+0

**サードパーティのモジュールはありません** – Wyren

+0

上記の答えの最初の例を使用してタスクリストを取得し、それを調べます。それは遅くなりますが、少なくとも4つのサブプロセスを常に作成することはありません。 – zwer

答えて

1

はあなたがいないサードパーティのモジュールを主張(およびWindows上で動作しているときに私はそれのWin32APIを主張したいとにかくパイソンに同梱されなければならない)場合は、 Pythonを通してすべてをやろうとするのではなく、Win32 APIを利用するシステムに、ほとんどの作業を少なくとも相殺することができます。ここで私はそれを行うだろう方法は次のとおりです。あなたも、このいずれかのパフォーマンスへの影響を意識することはありません

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 

ほとんどの場合。

まず、このようなことが全く別の話題である必要があるのはなぜですか?私はこのようなスクリプトでは実際に使用することはできないと主張します。

関連する問題