我想使用我发现的这个脚本来加热CPU,但是无法安全地确保它不会过热。
import multiprocessing
import sys
def round_robin_count():
while(True):
number = 0
if(number >= sys.maxsize):
number = 0
else:
number = number + 1
if len(sys.argv) == 2 and sys.argv[1] == '--about':
print(__doc__)
elif len(sys.argv) == 2 and sys.argv[1] == '--help':
print('Heater', 'USAGE: python3 ' + sys.argv[0] + ' [option]', sep='\n')
print('To read about.', 'python3 ' + sys.argv[0] + ' --about' ,sep=' ')
print('To see this help message.', 'python3 ' + sys.argv[0] + ' --help', sep=' ')
else:
process_count = 1
print('Heating up the CPU')
while(process_count <= multiprocessing.cpu_count()):
process_to_be_not_seen_again = multiprocessing.Process(target=round_robin_count)
process_to_be_not_seen_again.start()
process_count += 1
用Python编写的this script可以安全地温和加热计算机以消除任何错误吗?即使有可能(或安全),似乎也无法控制将鼠标悬停在什么温度上。如果不安全,可以安全吗?
答案 0 :(得分:2)
为使脚本安全,建议您为CPU设置一个截止温度。您可以使用内置的psutil
import psutil
print(psutil.sensors_temperatures())
输出:
{'coretemp': [shwtemp(label='Package id 0', current=55.0, high=82.0, critical=100.0), shwtemp(label='Core 0', current=35.0, high=82.0, critical=100.0), shwtemp(label='Core 1', current=34.0, high=82.0, critical=100.0), shwtemp(label='Core 2', current=55.0, high=82.0, critical=100.0), shwtemp(label='Core 3', current=34.0, high=82.0, critical=100.0), shwtemp(label='Core 4', current=35.0, high=82.0, critical=100.0), shwtemp(label='Core 5', current=34.0, high=82.0, critical=100.0)]}
因此,您需要编写一个可以引用此脚本的脚本,并确保没有内核达到临界温度。
所以也许在while循环中,您可以这样修改
critical_temp = 80.0
keep_heating = True
cpu_temperatures = psutil.sensors_temperatures()
for cpu_temp in cpu_temperatures['coretemp']:
if cpu_temp >= critical_temp:
keep_heating = False
然后while循环可能包含keep_heating
作为条件。
while process_count <= multiprocessing.cpu_count() and keep_heating:
process_to_be_not_seen_again = multiprocessing.Process(target=round_robin_count)
process_to_be_not_seen_again.start()
process_count += 1
some_function_to_recheck_heat()
可能还添加了一个杀死进程的功能。
答案 1 :(得分:1)
一个对我有用的简单闭环控制器,只是忙着循环检查温度
首先引入一些有用的库并定义一个助手:
from random import random
from time import sleep
from multiprocessing import Pool, cpu_count
from psutil import sensors_temperatures
def cpu_temps():
return sensors_temperatures()['coretemp']
然后,我定义了一个功能,该功能可以在CPU“过热”(由target_temp
定义)时工作并进入睡眠状态:
target_temp = 66 # or min(t.high for t in cpu_temps())
def warmer(i):
while True:
cur_temp = max(t.current for t in cpu_temps())
if cur_temp > target_temp:
sleep(1 + random() * i)
1 + random() * i
可以帮助防止温度下降到目标温度以下的所有CPU旋转
然后我通过滥用Pool
中的multiprocessing
来结束它,以便它可以完成设置流程并将其整洁地拆除的所有工作:
print('sensor names:', ', '.join(t.label for t in cpu_temps()))
nprocs = cpu_count()
with Pool(nprocs) as pool:
jobs = pool.imap(warmer, range(nprocs))
while True:
print('current temps:', ', '.join(f'{t.current:.0f}' for t in cpu_temps()))
sleep(1)
这显然会每秒打印出当前温度,但是可以更改或将其设置为命令行参数,例如argparse