【问题标题】:Python: Most efficient loop until conditionPython:最有效的循环直到条件
【发布时间】:2014-04-03 12:40:56
【问题描述】:

我的代码中有一点需要这样做:

while True:
  if first_number == second_number:
    do_something()
    break

第一个数字会不断增加,超出我的控制范围,我需要等到这个数字达到第二个数字的值才能继续。

我正在寻找使用最少资源 (CPU) 的最佳方法。

【问题讨论】:

  • 跳过循环并执行first_number = second_number?

标签: python loops conditional-statements infinite-loop


【解决方案1】:

在 while 循环的条件本身中检查第一个数字是否不等于第二个数字。

while first_number != second_number:

【讨论】:

  • 但这不会以 100% 的速度运行 CPU 吗?
  • @A_Porcupine 你所说的 100% 是什么意思,你到底想做什么?
  • 我的错误,错过了那里的“CPU”。
  • 第一个数字超出了我的控制范围,并且会不断增加,一旦达到第二个数字的值,我需要在我的代码中做一些事情。
  • @A_Porcupine 如果first_numbersecond_number 之间的差异太大,这是你能做的最好的:)
【解决方案2】:

你可以试试:

while first_number != second_number:
    #Do what you want

【讨论】:

    【解决方案3】:

    您正在做的事情称为“忙于等待”。为了在不占用 CPU 时间的情况下执行此操作,您应该在循环的每次迭代中休眠一小段时间:

    while True:
      if first_number == second_number:
        do_something()
        break
      time.sleep(0.1)
    

    适当调整睡眠间隔。

    但可能有更好的方法来完成您想要的。如果first_number“不受您的控制”,它如何改变价值?您的程序是否接收输入?从套接字读取?您是否正在发送网络数据请求?这些数据是否在使用multiprocessing 设施的进程之间共享?

    【讨论】:

    • 这是我看过的解决方案之一,但想看看是否还有其他解决方案。
    • 我目前要解决的实际问题是:first_number 是歌曲的当前时间位置,second_number 是歌曲的总时长。当歌曲结束时我需要运行一些代码,但处理这个问题的内置函数似乎不起作用(另一个问题),我还是想知道这个。
    • 在不了解用例的情况下仍然很难推荐替代方案(歌曲是否在子进程中播放?通过某些库函数在单独的线程中播放?)。无论如何,为此目的使用sleep 是完全标准的。
    • 有什么方法可以让事情异步吗?可能会承担在用户代码中需要循环的负担。
    猜你喜欢
    • 2021-12-24
    • 2018-06-29
    • 2013-12-09
    • 2016-12-18
    • 2023-03-24
    • 2020-03-19
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多