Automate Saving the Planet… Or Just Your Computer’s Energy

I came across @oliverbennet is post “What’s a Quickie Post?” and couldn’t resist giving it a try Quickie Post myself. So, here’s a Python twist on a global problem:

Problem: Fighting climate change is a serious challenge, but did you know Python is playing a role in it?

Imagine you’re writing code on Python to help reduce energy waste:

<span>import</span> <span>os</span>
<span>def</span> <span>save_energy</span><span>():</span>
<span>if</span> <span>os</span><span>.</span><span>name</span> <span>==</span> <span>"</span><span>nt</span><span>"</span><span>:</span> <span># Windows </span> <span>os</span><span>.</span><span>system</span><span>(</span><span>"</span><span>shutdown /s /t 1</span><span>"</span><span>)</span>
<span>elif</span> <span>os</span><span>.</span><span>name</span> <span>==</span> <span>"</span><span>posix</span><span>"</span><span>:</span> <span># macOS/Linux </span> <span>os</span><span>.</span><span>system</span><span>(</span><span>"</span><span>pmset sleepnow</span><span>"</span><span>)</span>
<span>else</span><span>:</span>
<span>print</span><span>(</span><span>"</span><span>Unsupported OS! </span><span>"</span><span>)</span>
<span>print</span><span>(</span><span>"</span><span>Computer shutting down to save energy! </span><span>"</span><span>)</span>
<span># Save the planet </span><span>save_energy</span><span>()</span>
<span>import</span> <span>os</span>

<span>def</span> <span>save_energy</span><span>():</span>
    <span>if</span> <span>os</span><span>.</span><span>name</span> <span>==</span> <span>"</span><span>nt</span><span>"</span><span>:</span>  <span># Windows </span>        <span>os</span><span>.</span><span>system</span><span>(</span><span>"</span><span>shutdown /s /t 1</span><span>"</span><span>)</span>
    <span>elif</span> <span>os</span><span>.</span><span>name</span> <span>==</span> <span>"</span><span>posix</span><span>"</span><span>:</span>  <span># macOS/Linux </span>        <span>os</span><span>.</span><span>system</span><span>(</span><span>"</span><span>pmset sleepnow</span><span>"</span><span>)</span>
    <span>else</span><span>:</span>
        <span>print</span><span>(</span><span>"</span><span>Unsupported OS! </span><span>"</span><span>)</span>
    <span>print</span><span>(</span><span>"</span><span>Computer shutting down to save energy! </span><span>"</span><span>)</span>

<span># Save the planet </span><span>save_energy</span><span>()</span>
import os def save_energy(): if os.name == "nt": # Windows os.system("shutdown /s /t 1") elif os.name == "posix": # macOS/Linux os.system("pmset sleepnow") else: print("Unsupported OS! ") print("Computer shutting down to save energy! ") # Save the planet save_energy()

Enter fullscreen mode Exit fullscreen mode

Great, let’s try something more sophisticated. We’re all aware that high CPU or GPU usage translates to more energy consumption. So, this Python script uses APScheduler to periodically check system load, and if it’s too high, it shuts down or puts the computer to sleep.

<span>import</span> <span>os</span>
<span>import</span> <span>psutil</span> <span># For monitoring CPU usage </span><span>import</span> <span>GPUtil</span> <span># For monitoring GPU usage </span><span>from</span> <span>apscheduler.schedulers.blocking</span> <span>import</span> <span>BlockingScheduler</span>
<span>def</span> <span>save_energy</span><span>():</span>
<span>"""</span><span>Shutdown or put the system to sleep if CPU or GPU load is too high.</span><span>"""</span>
<span>print</span><span>(</span><span>"</span><span>Energy-saving monitor started! </span><span>"</span><span>)</span>
<span>if</span> <span>os</span><span>.</span><span>name</span> <span>==</span> <span>"</span><span>nt</span><span>"</span><span>:</span> <span># Windows </span> <span>os</span><span>.</span><span>system</span><span>(</span><span>"</span><span>shutdown /s /t 1</span><span>"</span><span>)</span>
<span>elif</span> <span>os</span><span>.</span><span>name</span> <span>==</span> <span>"</span><span>posix</span><span>"</span><span>:</span> <span># macOS/Linux </span> <span>os</span><span>.</span><span>system</span><span>(</span><span>"</span><span>pmset sleepnow</span><span>"</span><span>)</span>
<span>else</span><span>:</span>
<span>print</span><span>(</span><span>"</span><span>Unsupported OS! </span><span>"</span><span>)</span>
<span>print</span><span>(</span><span>"</span><span>Computer shutting down to save energy! </span><span>"</span><span>)</span>
<span>def</span> <span>check_system_load</span><span>():</span>
<span>"""</span><span>Check CPU and GPU load and trigger save_energy if either is too high.</span><span>"""</span>
<span># Check CPU load </span> <span>cpu_load</span> <span>=</span> <span>psutil</span><span>.</span><span>cpu_percent</span><span>(</span><span>interval</span><span>=</span><span>1</span><span>)</span>
<span>print</span><span>(</span><span>f</span><span>"</span><span>Current CPU Load: </span><span>{</span><span>cpu_load</span><span>}</span><span>%</span><span>"</span><span>)</span>
<span># Check GPU load </span> <span>gpus</span> <span>=</span> <span>GPUtil</span><span>.</span><span>getGPUs</span><span>()</span>
<span>if</span> <span>gpus</span><span>:</span>
<span>gpu_load</span> <span>=</span> <span>max</span><span>(</span><span>gpu</span><span>.</span><span>load</span> <span>*</span> <span>100</span> <span>for</span> <span>gpu</span> <span>in</span> <span>gpus</span><span>)</span> <span># Get max load of all GPUs </span> <span>print</span><span>(</span><span>f</span><span>"</span><span>Current GPU Load: </span><span>{</span><span>gpu_load</span><span>}</span><span>%</span><span>"</span><span>)</span>
<span>else</span><span>:</span>
<span>gpu_load</span> <span>=</span> <span>0</span>
<span>print</span><span>(</span><span>"</span><span>No GPUs detected.</span><span>"</span><span>)</span>
<span># Trigger energy-saving if CPU or GPU load is too high </span> <span>if</span> <span>cpu_load</span> <span>></span> <span>90</span> <span>or</span> <span>gpu_load</span> <span>></span> <span>90</span><span>:</span> <span># Adjust thresholds as needed </span> <span>print</span><span>(</span><span>"</span><span>High system load detected! Initiating energy-saving protocol... </span><span>"</span><span>)</span>
<span>save_energy</span><span>()</span>
<span># Set up the scheduler </span><span>scheduler</span> <span>=</span> <span>BlockingScheduler</span><span>()</span>
<span>scheduler</span><span>.</span><span>add_job</span><span>(</span><span>check_system_load</span><span>,</span> <span>'</span><span>interval</span><span>'</span><span>,</span> <span>minutes</span><span>=</span><span>1</span><span>)</span> <span># Check every minute </span>
<span>import</span> <span>os</span>
<span>import</span> <span>psutil</span>  <span># For monitoring CPU usage </span><span>import</span> <span>GPUtil</span>  <span># For monitoring GPU usage </span><span>from</span> <span>apscheduler.schedulers.blocking</span> <span>import</span> <span>BlockingScheduler</span>

<span>def</span> <span>save_energy</span><span>():</span>
    <span>"""</span><span>Shutdown or put the system to sleep if CPU or GPU load is too high.</span><span>"""</span>
    <span>print</span><span>(</span><span>"</span><span>Energy-saving monitor started! </span><span>"</span><span>)</span>
    <span>if</span> <span>os</span><span>.</span><span>name</span> <span>==</span> <span>"</span><span>nt</span><span>"</span><span>:</span>  <span># Windows </span>        <span>os</span><span>.</span><span>system</span><span>(</span><span>"</span><span>shutdown /s /t 1</span><span>"</span><span>)</span>
    <span>elif</span> <span>os</span><span>.</span><span>name</span> <span>==</span> <span>"</span><span>posix</span><span>"</span><span>:</span>  <span># macOS/Linux </span>        <span>os</span><span>.</span><span>system</span><span>(</span><span>"</span><span>pmset sleepnow</span><span>"</span><span>)</span>
    <span>else</span><span>:</span>
        <span>print</span><span>(</span><span>"</span><span>Unsupported OS! </span><span>"</span><span>)</span>
    <span>print</span><span>(</span><span>"</span><span>Computer shutting down to save energy! </span><span>"</span><span>)</span>

<span>def</span> <span>check_system_load</span><span>():</span>
    <span>"""</span><span>Check CPU and GPU load and trigger save_energy if either is too high.</span><span>"""</span>
    <span># Check CPU load </span>    <span>cpu_load</span> <span>=</span> <span>psutil</span><span>.</span><span>cpu_percent</span><span>(</span><span>interval</span><span>=</span><span>1</span><span>)</span>
    <span>print</span><span>(</span><span>f</span><span>"</span><span>Current CPU Load: </span><span>{</span><span>cpu_load</span><span>}</span><span>%</span><span>"</span><span>)</span>

    <span># Check GPU load </span>    <span>gpus</span> <span>=</span> <span>GPUtil</span><span>.</span><span>getGPUs</span><span>()</span>
    <span>if</span> <span>gpus</span><span>:</span>
        <span>gpu_load</span> <span>=</span> <span>max</span><span>(</span><span>gpu</span><span>.</span><span>load</span> <span>*</span> <span>100</span> <span>for</span> <span>gpu</span> <span>in</span> <span>gpus</span><span>)</span>  <span># Get max load of all GPUs </span>        <span>print</span><span>(</span><span>f</span><span>"</span><span>Current GPU Load: </span><span>{</span><span>gpu_load</span><span>}</span><span>%</span><span>"</span><span>)</span>
    <span>else</span><span>:</span>
        <span>gpu_load</span> <span>=</span> <span>0</span>
        <span>print</span><span>(</span><span>"</span><span>No GPUs detected.</span><span>"</span><span>)</span>

    <span># Trigger energy-saving if CPU or GPU load is too high </span>    <span>if</span> <span>cpu_load</span> <span>></span> <span>90</span> <span>or</span> <span>gpu_load</span> <span>></span> <span>90</span><span>:</span>  <span># Adjust thresholds as needed </span>        <span>print</span><span>(</span><span>"</span><span>High system load detected! Initiating energy-saving protocol... </span><span>"</span><span>)</span>
        <span>save_energy</span><span>()</span>

<span># Set up the scheduler </span><span>scheduler</span> <span>=</span> <span>BlockingScheduler</span><span>()</span>
<span>scheduler</span><span>.</span><span>add_job</span><span>(</span><span>check_system_load</span><span>,</span> <span>'</span><span>interval</span><span>'</span><span>,</span> <span>minutes</span><span>=</span><span>1</span><span>)</span>  <span># Check every minute </span>
import os import psutil # For monitoring CPU usage import GPUtil # For monitoring GPU usage from apscheduler.schedulers.blocking import BlockingScheduler def save_energy(): """Shutdown or put the system to sleep if CPU or GPU load is too high.""" print("Energy-saving monitor started! ") if os.name == "nt": # Windows os.system("shutdown /s /t 1") elif os.name == "posix": # macOS/Linux os.system("pmset sleepnow") else: print("Unsupported OS! ") print("Computer shutting down to save energy! ") def check_system_load(): """Check CPU and GPU load and trigger save_energy if either is too high.""" # Check CPU load cpu_load = psutil.cpu_percent(interval=1) print(f"Current CPU Load: {cpu_load}%") # Check GPU load gpus = GPUtil.getGPUs() if gpus: gpu_load = max(gpu.load * 100 for gpu in gpus) # Get max load of all GPUs print(f"Current GPU Load: {gpu_load}%") else: gpu_load = 0 print("No GPUs detected.") # Trigger energy-saving if CPU or GPU load is too high if cpu_load > 90 or gpu_load > 90: # Adjust thresholds as needed print("High system load detected! Initiating energy-saving protocol... ") save_energy() # Set up the scheduler scheduler = BlockingScheduler() scheduler.add_job(check_system_load, 'interval', minutes=1) # Check every minute

Enter fullscreen mode Exit fullscreen mode

How can we save the planet in other programming languages? Let’s discuss!

原文链接:Automate Saving the Planet… Or Just Your Computer’s Energy

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
I love you for my life past.
我爱你,爱了整整一个曾经
评论 抢沙发

请登录后发表评论

    暂无评论内容