[英]Skip an iteration if time limit exceeds PYTHON
我正在为我的项目使用请求库中的代理,具体取决于所使用的代理,每个请求花费不同的时间(不可预测的时间)。
for proxy in proxyList:
r=requests.post(url, proxies=proxy, data=payload)
如果某个请求花费的时间超过了某个时间,我想跳过它,转到下一个请求。该怎么办?
编辑:使用超时参数会引发一个异常。当然,我可以通过异常处理来完成我的工作。但是我希望从更一般的意义上讲。例如,如果我不谈论请求该怎么办..假设有一个语句的时间无法预定义?! 有什么方法可以进行下一个迭代吗?
在Mac / UNIX系统上,可以在一段时间后引发自定义异常,如下所示:
import signal
class TimeoutException(Exception): # custom exception
pass
def timeout_handler(signum, frame): # raises exception when signal sent
raise TimeoutException
# Makes it so that when SIGALRM signal sent, it calls the function timeout_handler, which raises your exception
signal.signal(signal.SIGALRM, timeout_handler)
# Start the timer. Once 5 seconds are over, a SIGALRM signal is sent.
for proxy in proxyList:
signal.alarm(5)
try:
r=requests.post(url, proxies=proxy, data=payload)
except TimeoutException:
pass
基本上,您将创建一个自定义的异常,该异常会在超过时间限制(即发送SIGALRM
)后SIGALRM
。 您当然可以调整时间限制。
就您而言,就我所知,您可以使用timeout参数。 如文档所述 :
您可以使用timeout参数在给定的秒数后告诉请求停止等待响应。 几乎所有生产代码都应在几乎所有请求中使用此参数。 否则,可能会导致您的程序无限期挂起[...]
所以你的代码最终看起来像
for proxy in proxyList:
r=requests.post(url, proxies=proxy, data=payload, timeout=1)
(超时参数以秒为单位。)
例如,将timeout=10
添加到您的post
通话中。
r = requests.post(url, proxies=proxy, data=payload, timeout=10)
您可以自己通过help(requests.post)
或通过查看文档来回答问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.