<p>您可以使用<code>threading</code>运行<code>iHateThis</code>或使用<code>cpu_percent()</code>运行函数。我选择第二个版本。我将在线程中运行<code>cpu_percent()</code></p>
<p>因为它使用<code>while True</code>,所以线程将永远运行,并且没有好的方法来停止线程,所以我使用全局变量<code>running</code>和<code>while running</code>来有方法来停止这个循环</p>
<pre><code>import threading
import psutil
def display_cpu():
global running
running = True
currentProcess = psutil.Process()
# start loop
while running:
print(currentProcess.cpu_percent(interval=1))
def start():
global t
# create thread and start it
t = threading.Thread(target=display_cpu)
t.start()
def stop():
global running
global t
# use `running` to stop loop in thread so thread will end
running = False
# wait for thread's end
t.join()
</code></pre>
<p>现在我可以用它来启动和停止显示CPU的线程。因为我可能必须使用<code>Ctrl+C</code>停止进程,所以它会引发错误,所以我使用<code>try/finally</code>停止线程,即使会出现错误</p>
<pre><code>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 even if I press Ctrl+C
stop()
</code></pre>
<hr/>
<p>完整代码:</p>
<pre><code>import random
import threading
import psutil
def display_cpu():
global running
running = True
currentProcess = psutil.Process()
# start loop
while running:
print(currentProcess.cpu_percent(interval=1))
def start():
global t
# create thread and start it
t = threading.Thread(target=display_cpu)
t.start()
def stop():
global running
global t
# use `running` to stop loop in thread so thread will end
running = False
# wait for thread's end
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 even if I press Ctrl+C
stop()
</code></pre>
<hr/>
<p>顺便说一句:这可以转换为从类线程继承的类,然后它可以在类中隐藏变量<code>running</code></p>
<pre><code>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: # stop thread even when I press Ctrl+C
display_cpu.stop()
</code></pre>
<hr/>
<p>还可以将其转换为上下文管理器以作为</p>
<pre><code>with display_cpu():
i_hate_this()
</code></pre>
<p>但我跳过这部分</p>