您可以使用 threading
来运行iHateThis
或者运行带有 cpu_percent()
的函数。我选择第二个版本,会在线程中运行 cpu_percent()
。
由于它使用while True
,所以线程将永远运行,并且没有很好的停止线程的方法,因此我使用全局变量running
并使用while running
来停止这个循环。
import threading
import psutil
def display_cpu():
global running
running = True
currentProcess = psutil.Process()
while running:
print(currentProcess.cpu_percent(interval=1))
def start():
global t
t = threading.Thread(target=display_cpu)
t.start()
def stop():
global running
global t
running = False
t.join()
现在我可以使用它来启动和停止线程,这将显示CPU的使用情况。因为我可能需要使用Ctrl+C
来停止进程,所以它会引发错误,因此我使用try/finally
来确保即使出现错误也能停止线程。
def i_hate_this():
tab = []
for i in range(1000000):
tab.append(random.randint(1, 10000))
tab.sort()
return tab
start()
try:
result = i_hate_this()
finally:
stop()
完整代码:
import random
import threading
import psutil
def display_cpu():
global running
running = True
currentProcess = psutil.Process()
while running:
print(currentProcess.cpu_percent(interval=1))
def start():
global t
t = threading.Thread(target=display_cpu)
t.start()
def stop():
global running
global t
running = False
t.join()
def i_hate_this():
tab = []
for i in range(1000000):
tab.append(random.randint(1, 10000))
tab.sort()
return tab
start()
try:
result = i_hate_this()
finally:
stop()
顺便说一句:这可以转换为继承自类Thread的类,然后它可以在类中隐藏变量running
。
import psutil
import random
import threading
class DisplayCPU(threading.Thread):
def run(self):
self.running = True
currentProcess = psutil.Process()
while self.running:
print(currentProcess.cpu_percent(interval=1))
def stop(self):
self.running = False
def i_hate_this():
tab = []
for i in range(1000000):
tab.append(random.randint(1, 10000))
tab.sort()
return tab
display_cpu = DisplayCPU()
display_cpu.start()
try:
result = i_hate_this()
finally:
display_cpu.stop()
它也可以转换为上下文管理器,以以下方式运行:
with display_cpu():
i_hate_this()
but I skip this part.