如何在没有回复的情况下在5分钟后取消请求

时间:2018-04-18 22:48:26

标签: python python-2.7 asynchronous

我有以下功能,

import requests

def get_url_type(data):
    x = {}
    for i in range(0,len(data)):
        print i        
        try:
            x[i] = requests.head(data['url'][i]).headers.get('content-type')
        except:
            x[i] = 'Not Available'
    return(x)

此函数返回传递给它的每个URL的URL类型,并且每当没有响应时,它抛出使用异常捕获的错误。我的问题是,一些请求需要超过5-10分钟的时间,这对生产环境来说太多了。我希望函数在超过5分钟时返回“Not Available”。当我对它进行研究时,提到将函数转换为异步函数。我试图改变它而没有太大的成功。

以下是我的尝试,

import asyncio  
import time  
from datetime import datetime

async def custom_sleep():  
    print('SLEEP', datetime.now())
    time.sleep(5)

我的目标是,每当请求函数超过5分钟时,它应返回“不可用”并转到下一次迭代。

有人可以帮我这么做吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

似乎您只是希望在给定时间过后没有回复时超时,然后转到下一个请求。对于此功能,您可以在请求中添加timeout参数。关于此的文档:http://docs.python-requests.org/en/master/user/quickstart/#timeouts

超时300秒(5分钟)后,您的代码变为:

requests.head(data['url'][i], timeout=300)

您提到的异步功能实际上有不同的目标。这将允许您的代码在继续执行之前不必等待5分钟,但我相信这将是一个不同的问题。