如何在Python脚本中设置时间延迟?
当前回答
用一台昏昏欲睡的发电机来找点乐子。
问题是关于时间延迟。它可以是固定的时间,但在某些情况下,我们可能需要从上次开始测量延迟。以下是一种可能的解决方案:
自上次测量的延迟(定期醒来)
情况可能是,我们希望尽可能定期地做一些事情,而不想在代码中使用所有last_time和next_time的东西。
蜂鸣器发生器
以下代码(sleep.py)定义了一个buzzergen生成器:
import time
from itertools import count
def buzzergen(period):
nexttime = time.time() + period
for i in count():
now = time.time()
tosleep = nexttime - now
if tosleep > 0:
time.sleep(tosleep)
nexttime += period
else:
nexttime = now + period
yield i, nexttime
调用常规蜂鸣器
from sleepy import buzzergen
import time
buzzer = buzzergen(3) # Planning to wake up each 3 seconds
print time.time()
buzzer.next()
print time.time()
time.sleep(2)
buzzer.next()
print time.time()
time.sleep(5) # Sleeping a bit longer than usually
buzzer.next()
print time.time()
buzzer.next()
print time.time()
运行它,我们可以看到:
1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47
我们也可以在循环中直接使用它:
import random
for ring in buzzergen(3):
print "now", time.time()
print "ring", ring
time.sleep(random.choice([0, 2, 4, 6]))
运行它,我们可能会看到:
now 1400102751.46
ring (0, 1400102754.461676)
now 1400102754.46
ring (1, 1400102757.461676)
now 1400102757.46
ring (2, 1400102760.461676)
now 1400102760.46
ring (3, 1400102763.461676)
now 1400102766.47
ring (4, 1400102769.47115)
now 1400102769.47
ring (5, 1400102772.47115)
now 1400102772.47
ring (6, 1400102775.47115)
now 1400102775.47
ring (7, 1400102778.47115)
正如我们所看到的,这个蜂鸣器并不太死板,即使我们睡过头了,也能赶上规律的睡眠时间。
其他回答
延迟是通过时间库完成的,特别是time.sleep()函数。
让它等待一秒钟:
from time import sleep
sleep(1)
这之所以有效,是因为通过执行以下操作:
from time import sleep
你只从时间库中提取睡眠函数,这意味着你只需要调用它:
sleep(seconds)
而不是必须键入
time.sleep()
打字的时间太长了。
使用此方法,您将无法访问时间库的其他功能,也无法使用名为sleep的变量。但您可以创建一个名为time的变量。
如果您只需要模块的某些部分,那么从[library]导入[function](,[function2])非常有用。
你也可以这样做:
import time
time.sleep(1)
只要输入time,就可以访问时间库的其他功能,如time.clock()。[function](),但无法创建变量time,因为它会覆盖导入。要做的解决方案
import time as t
这将允许您将时间库引用为t,允许您执行以下操作:
t.sleep()
这适用于任何库。
Python标准库中的Tkinter库是一个可以导入的交互式工具。基本上,您可以创建按钮、框、弹出窗口和显示为窗口的东西,并使用代码进行操作。
如果使用Tkinter,请不要使用time.sleep(),因为它会破坏程序。这种情况发生在我身上。相反,使用root.after()并用毫秒来替换多少秒的值。例如,time.sleep(1)相当于Tkinter中的root.after(1000)。
否则,许多答案都指出了time.sleep(),这才是正确的方法。
也可以通过以下方法实现延迟。
第一种方法:
import time
time.sleep(5) # Delay for 5 seconds.
延迟的第二种方法是使用隐式等待方法:
driver.implicitly_wait(5)
当您必须等待特定操作完成或找到元素时,第三种方法更有用:
self.wait.until(EC.presence_of_element_located((By.ID, 'UserName'))
虽然其他人都建议使用事实上的时间模块,但我想我应该使用matplotlib的pyplot函数pause来分享一种不同的方法。
一个例子
from matplotlib import pyplot as plt
plt.pause(5) # Pauses the program for 5 seconds
通常,这是为了防止绘图在绘制后立即消失或制作粗糙的动画。
如果您已经导入了matplotlib,这将为您保存一个导入。
您也可以尝试以下操作:
import time
# The time now
start = time.time()
while time.time() - start < 10: # Run 1- seconds
pass
# Do the job
现在,炮弹不会坠毁,也不会反应。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- JavaScript中有睡眠/暂停/等待功能吗?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if