Python 使用while的wait函数

Python 使用while的wait函数,python,python-2.x,Python,Python 2.x,我刚刚写了一个函数,看起来像这样: def block_for(seconds): """Wait at least seconds, this function should not be affected by the computer sleeping.""" end_time = datetime.datetime.now() + datetime.timedelta(seconds) while datetime.datetime.now() < end

我刚刚写了一个函数,看起来像这样:

def block_for(seconds):
    """Wait at least seconds, this function should not be affected by the computer sleeping."""
    end_time = datetime.datetime.now() + datetime.timedelta(seconds)

    while datetime.datetime.now() < end_time:
        pass
def block_(秒):
“”“请至少等待几秒钟,此功能不应受到计算机睡眠的影响。”“”
end_time=datetime.datetime.now()+datetime.timedelta(秒)
while datetime.datetime.now()
这会有什么不好的结果吗?理想情况下,while循环中应该有什么东西吗?

秒就可以做到这一点,而不会消耗CPU周期。您的循环使CPU处于完全繁忙状态。我不知道你,但我认为这是坏的。

< P>也许在时间环中放时间。(1)需要更少的循环。或

def block_for(seconds):
    """Wait at least seconds, this function should not be affected by the computer sleeping."""
    end_time = datetime.datetime.now() + datetime.timedelta(seconds=seconds)

    while datetime.datetime.now() < end_time - datetime.timedelta(seconds=1):
        time.sleep(1)

    while datetime.datetime.now() < end_time:
        pass
def block_(秒):
“”“请至少等待几秒钟,此功能不应受到计算机睡眠的影响。”“”
end_time=datetime.datetime.now()+datetime.timedelta(秒=秒)
而datetime.datetime.now()
可能吧,但是time.sleep会被计算机睡眠打断,我的循环不会。我正在寻找解决方案,我的问题提出了一个,我想知道它是否安全。你仍然可以
在你的循环中睡眠一秒钟;那会更好-循环每秒只运行一次。不确定是否可以做到;当您挂起计算机时,也可能会被丢弃。定时执行是操作系统擅长的事情(
cron
at
或您选择的操作系统提供的任何东西)。我不知道这是否是你的选择。@theonlygusti我不理解这个建议解决方案的问题。您只能在很短的时间内用
sleep
替换
pass
。这样做的目的是,您不必让CPU以尽可能快的速度运行
循环。延迟不一定很重要。对我来说,
datetime.timedelta(1)
似乎返回了一天的延迟。
datetime.timedelta(秒=1)
就是你的意思(对吧?。@onlygusti你可能想使用更小的延迟,例如
time.sleep(0.2)
。如果在
while
循环之外计算
end\u time-datetime.timedelta(秒=1)
会更有效,但我想这没什么大不了的。@pm2如果我已经这样做了,我的解决方案看起来像
end\u time=datetime.datetime.now()+datetime.timedelta(秒=seconds)而datetime.datetime.now()
这两个
在这个答案中循环时有什么意义?第二个几乎在第一个退出后立即退出。第二个似乎是完全多余的,除了可能使用更多的循环之外?这应该是完全正确的,并且正是
pass
所要解决的那种情况。我在这里提出的唯一建议是,在代码顶部,从datetime导入datetime
和从datetime导入timedelta
,然后将
datetime.datetime.now
更改为
datetime.now
datetime.timedelta
,这将通过只导入所需的
datetime
位来减少开销,并使代码更具可读性。也就是说,除非您在代码中的其他地方使用了
datetime
中的其他部分。使用
pass
的好处在于,您的代码对python 2和3是有效的。答案中的print语句使用尾随符,并且
end=
语法仅对Python3有效,同样效果的Python2语法将不会在Python3中运行。time.sleep(1)替换答案也很有效,在循环方面可能会略有改进。