这是一个每隔几分钟发出声音的简单脚本:
import pyglet
import time
from random import randint
music = pyglet.resource.media('input.wav', streaming=False)
def playSound():
music.play()
counter = 0
random = randint(300,900)
prevTime = 0
while True:
counter += time.time() - prevTime
prevTime = time.time()
if (counter>random):
playSound()
counter = 0
random = randint(300,900)
按预期工作,但它使用100%CPU。有没有办法让它更有效率?这是我在这里完成的方式' python'做事的方式?
答案 0 :(得分:3)
该方法取决于您是否需要脚本在等待时执行任何其他操作。如果它只需要播放文件,那么以下方法就足够了:
import pyglet
import time
import random
music = pyglet.resource.media('input.wav', streaming=False)
def playSound():
music.play()
while True:
time.sleep(random.randint(300, 900))
playSound()
time.sleep将在给定的秒数内暂停脚本的执行。因此它不会使用任何CPU。
答案 1 :(得分:1)
在循环中添加time.sleep(.1)
。您的循环当前很忙,因为它会尽可能快地更新current_time。添加sleep()
调用允许CPU有一些喘息空间来做其他事情。
此外,time.time()
逻辑可以改进,因此您只需执行一次函数调用(函数调用在Python中相对较慢):
current_time = time.time()
counter += current_time - prev_time
prev_time = current_time
或者更好的是,只需保持开始时间并比较差异(假设您正确初始化所有内容):
current_time = time.time()
if current_time - start_time > random_interval:
play_sound()
start_time = current_time
random_interval = randint(300, 900)