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)替换答案也很有效,在循环方面可能会略有改进。