让python函数运行一段时间

时间:2014-05-05 16:30:41

标签: python time urllib

我有一个从各种内部网络资源中提取的python脚本。根据我们的系统设置方式,我们将从网络位置启动urllib pull,并且它会挂起,等待网络某些部分的响应。我希望我的脚本检查如果它还没有完成拉入让我们说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

更新:此处理网址timeout for urllib2.urlopen() in pre Python 2.6 versions

的特定选项

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

1 个答案:

答案 0 :(得分:4)

您的代码似乎没有描述您所说的内容。您似乎希望在while循环中进行if / else检查。最重要的是,您需要循环遍历IP地址而不是在一段时间内,因为您的代码当前已写入(否则您将每次都请求相同的IP地址)。我建议您阅读urllib.request.urlopen - 特别是timeout参数,而不是自己跟踪时间。设置后,一旦达到时间限制,该函数调用将抛出socket.timeout异常。围绕该try / except块捕获该错误,然后对其进行适当处理。