【问题标题】:Have a python function run for an alotted time让 python 函数运行很长时间
【发布时间】:2014-05-05 16:30:41
【问题描述】:

我有一个从各种内部网络资源中提取的 python 脚本。根据我们系统的设置方式,我们将从网络位置启动 urllib 拉取,它将永远挂起,等待网络某些部分的响应。我希望我的脚本检查它是否还没有完成拉入让我们说 5 分钟它将通过该函数并尝试从下一个地址拉出,并将其记录到错误的目录存储库中(这样我们就可以检查哪些系统挂断电话,我们正在检查超过 20,000 个 IP 地址,其中一些运行着一些旧脚本,这些脚本不再工作,但仍会在请求时尝试运行,并且它们永远不会停止尝试运行)

我熟悉让脚本在某个点暂停

import time
time.sleep(300)

我从伪代码的角度思考什么(不是正确的 python 只是说明这个想法)

import time
import urllib2
url_dict = ['http://1', 'http://2', 'http://3', ...]
fail_log_path = 'C:/Temp/fail_log.txt'
for addresses in url_dict:
    clock_value = time.start()
    while clock_value <= 300:
        print str(clock_value)
        res = urllib2.retrieve(url)
    if res != []:
        pass
    else:
        fail_log = open(fail_log_path, 'a')
        fail_log.write("Failed to pull from site location: " + str(url) + "\n")
        faile_log.close

更新:处理 url timeout for urllib2.urlopen() in pre Python 2.6 versions 的特定选项

发现这个答案更符合我的问题的整体问题: kill a function after a certain time in windows

【问题讨论】:

    标签: python time urllib


    【解决方案1】:

    您的代码似乎无法描述您所说的内容。看来你想要 if/else 检查你的 while 循环。最重要的是,您可能希望遍历 ip 地址,而不是在当前编写代码的时间段内循环(否则您每次都将继续请求相同的 ip 地址)。我建议不要自己跟踪时间,而是阅读urllib.request.urlopen - 特别是timeout 参数。设置后,一旦达到时间限制,该函数调用将引发socket.timeout 异常。用 try/except 块包围它来捕获该错误,然后适当地处理它。

    【讨论】:

    • 请注意,如果您使用的是 Python 2.x,则需要 urllib2.urlopen。
    • 是的,同样的想法。这是该链接:docs.python.org/2.7/library/urllib2.html#urllib2.urlopen
    • 感谢您的帮助,不确定是否有内置的处理程序。在这个答案中找到了具体的代码。 stackoverflow.com/questions/2084782/…
    • @AlienAnarchist:你的 Python 版本是多少?为什么不能使用response = urllib2.urlopen(url, timeout=300)
    • J.F. Sebastian 是的,这绝对可行,但不知道 urllib 包含该方面的参数。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 2011-03-16
    • 2019-11-29
    • 2019-06-29
    • 2018-05-07
    • 1970-01-01
    • 2023-01-16
    • 2018-01-18
    相关资源
    最近更新 更多