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