如何优化这个程序以降低CPU使用率?

2024-05-23 21:12:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个初学者,我制作了这个python脚本,以便我的电脑在祈祷时自动播放“azan”。我意识到当我的程序运行时,它占用了我29.1%的CPU。我怀疑这是因为:

while True:
    global azan_subuh, norm_azan
    # retrieving current time
    current_time = datetime.now().strftime("%I:%M %p")

    # playing azan subuh
    if current_time == prayer_times[0]:
        mixer.music.load(azan_subuh)
        mixer.music.play()
        time.sleep(3600)

    # playing normal azan
    elif current_time in prayer_times[2:6]:
        mixer.music.load(norm_azan)
        mixer.music.play()
        time.sleep(3600)

当两个条件都为假时。time.sleep(3600)是因为祈祷时间间隔至少一个小时。我还意识到当time.sleep(3600)运行时,该程序只使用0.3%的CPU,这将占用CPU的嫌疑缩小到上面的while循环。在

如何进一步优化我的程序,使它不会占用那么多CPU?在

这是整个剧本。如果在代码的其他部分有任何关于改进程序的建议,请随时发表意见,因为这将对我有很大帮助。在

^{pr2}$

Tags: 程序normtimemusicsleepcpucurrent意识
1条回答
网友
1楼 · 发布于 2024-05-23 21:12:49

您的脚本消耗CPU时间,因为大多数时间它都在不断地检查是否是某个特殊的时间;检查之间没有延迟,所以这就是所谓的“繁忙循环”。主循环中不到1秒的简单睡眠应该可以解决这个问题,因此它每秒只检查几次,而不是在它完成时检查:

while True:

    time.sleep(0.1)  # Avoid unnecessary checking

    global azan_subuh, norm_azan
    # retrieving current time
    current_time = datetime.now().strftime("%I:%M %p")

    # playing azan subuh
    if current_time == prayer_times[0]:
        mixer.music.load(azan_subuh)
        mixer.music.play()
        time.sleep(3600)

    # playing normal azan
    elif current_time in prayer_times[2:6]:
        mixer.music.load(norm_azan)
        mixer.music.play()
        time.sleep(3600)

相关问题 更多 >