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:只要条件为真,在一段时间内重复执行操作的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL 在一组条件中恰好有一个条件为真

MYSQL:用户上次在一段时间内处于活动状态[重复]

Kotlin:在条件为真时重复 n 次

case语句为真,但不执行真case条件下的代码[重复]

PHP while 循环

如何计算一个话题在一段时间内的趋势率?