Python:只要条件为真,在一段时间内重复执行操作
Posted
技术标签:
【中文标题】Python:只要条件为真,在一段时间内重复执行操作【英文标题】:Python: Perform ations repeatedly over a time interval, as long as a condition is true 【发布时间】:2011-05-18 08:04:49 【问题描述】:所以我正在尝试这样做(访问网站上的文件,读取其内容并执行操作,直到内容说退出。前提是它必须等待 x 秒才能再次访问该网站;重新检查内容):
perform = True
while(perform):
data = urllib.urlopen('someurl')
data = data.read()
if(data == '0'):
dosomething()
elif(data == '1'):
#1 signifies to exit the loop
perform = False
else:
time.sleep(10)
但是,这似乎永远不会奏效。 'Someurl' 总是有价值的。一些谷歌说这与睡眠功能有关。请帮忙!
【问题讨论】:
如果你每十毫秒攻击一次服务器,它很可能会在几秒钟内完全阻止你(或者允许合理的连接延迟,在它决定你是害虫)。然后你会得到一个 503 或类似的东西。慢点。 @Chris Morgan:在 Python 中,time.sleep 的参数以秒为单位,而不是毫秒(并且可能是浮点数)。无论如何,至少在 2.x 中。 @Karl:是的。我自己从来没有使用过time.sleep
,并且已经习惯了在其他语言中以毫秒为单位工作的事情,我没想到它会使用不同的单位。
@Chris:来自 Python 文档:time.sleep(secs)
:暂停执行给定的秒数,所以不是毫秒,而是秒。
【参考方案1】:
这个:
import time
while True:
print "fetching"
time.sleep(10)
是最小的测试用例,因为它总是有效,所以 time.sleep
函数不会有问题
【讨论】:
好的,看来问题是我使用的 IDE 所特有的;翅膀。即使使用您提供的代码,也从未抛出输出。但是,当我直接运行 py 文件时,它可以完美运行。诡异的!不过还是谢谢:) 您的 IDE 可能正在缓冲输出,并会在程序完成时显示它,或者缓冲区将有一些数据量。我认为您可以将日志写入某个文件(并刷新该文件)。【参考方案2】:1) 您是否尝试过实际检查您从阅读 URL 得到的 data
?比如,打印出来之类的?
2) 如果数据确实匹配 '0' 或 '1',那么你就不会遇到 else
的情况,所以 sleep()
不会发生。这很糟糕,因为这意味着您尝试立即再次读取数据。它可能不会改变,当你一遍又一遍地向他们询问相同的 URL 而不暂停时,Web 服务器通常不喜欢你(他们认为你试图破解它们)。解决方案:不要将sleep()
调用放在else
案例中;只需将其保留在与原始if
相同的级别即可。您不需要else
来获得有效代码。
【讨论】:
以上是关于Python:只要条件为真,在一段时间内重复执行操作的主要内容,如果未能解决你的问题,请参考以下文章