让python函数运行一段时间

让python函数运行一段时间,python,time,urllib,Python,Time,Urllib,我有一个python脚本,它来自各种内部网络源。根据系统的设置方式,我们将从网络位置启动urllib拉取,它将永远挂起,等待网络某些部分的响应。我想让我的脚本检查一下,如果它还没有完成拉入(比方说5分钟),它将通过函数并尝试从下一个地址拉入,并将其记录到错误的目录存储库中(因此,我们可以检查哪些系统被挂起,我们正在检查20000多个IP地址,其中一些是运行在上面的旧脚本,这些脚本不再工作,但仍会在请求时尝试运行,并且它们从未停止尝试运行) 我熟悉在某一点暂停脚本 import time time

我有一个python脚本,它来自各种内部网络源。根据系统的设置方式,我们将从网络位置启动urllib拉取,它将永远挂起,等待网络某些部分的响应。我想让我的脚本检查一下,如果它还没有完成拉入(比方说5分钟),它将通过函数并尝试从下一个地址拉入,并将其记录到错误的目录存储库中(因此,我们可以检查哪些系统被挂起,我们正在检查20000多个IP地址,其中一些是运行在上面的旧脚本,这些脚本不再工作,但仍会在请求时尝试运行,并且它们从未停止尝试运行)

我熟悉在某一点暂停脚本

import time
time.sleep(300)
我从psuedo代码的角度思考的是什么(不是真正的python,只是说明了这个想法)

导入时间
导入urllib2
url_dict=['http://1','http://2','http://3',…]
fail_log_path='C:/Temp/fail_log.txt'
对于url_dict中的地址:
时钟值=时间。开始()

虽然clock_value您的代码原样似乎无法描述您所说的内容。您似乎希望在while循环中检查
if
/
else
。除此之外,您希望在ip地址上循环,而不是在当前编写代码的时间段内循环(否则您每次都会继续请求相同的ip地址)。与其自己跟踪时间,我建议您仔细阅读-特别是
timeout
参数。一旦设置,该函数调用将在达到时间限制后引发异常。请使用
try
/
将其包围,但
阻止捕获该错误,然后适当处理它。

您的代码如下所示is似乎无法描述您所说的内容。您似乎希望在while循环中检查
if
/
else
。除此之外,您希望在ip地址上循环,而不是在代码当前编写的时间段内循环(否则,您每次都将继续请求相同的ip地址)。与其自己跟踪时间,我建议您仔细阅读-特别是
timeout
参数。一旦设置,该函数调用将在达到时间限制后引发异常。请使用
环绕该参数,尝试
/
,但
阻止捕获该错误,然后进行适当处理。

注意,如果“如果您使用Python 2.x,您想要的是urllib2.urlopen.Yup,但想法是一样的。这是一个链接:。感谢您的帮助,我不确定是否有内置的处理程序。在这个答案中找到了特定的代码。@AlienArchist:您的Python版本是什么?为什么不能使用
response=urllib2.urlopen(url,timeout=300)
?J.F.Sebastian是的,这绝对有效,我不知道urllib包含了这方面的参数。感谢您的输入。请注意,如果您使用的是Python 2.x,您需要urllib2.urlopen.Yup,尽管想法相同。下面是链接:。感谢您的帮助,我不确定是否有内置的处理程序。在这个answ中找到了特定的代码呃。@AlienArchist:你的Python版本是什么?为什么不能使用
response=urllib2.urlopen(url,timeout=300)
?J.F.塞巴斯蒂安:是的,那绝对有效,我不知道urllib包含这方面的参数。感谢你的输入。
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