【问题标题】:How to cancel a request after 5 minutes without a reply如何在 5 分钟后取消请求而没有回复
【发布时间】:2018-04-18 22:48:25
【问题描述】:

我有以下功能,

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 分钟时返回“不可用”。当我对此进行研究时,提到将函数转换为异步函数。我试图改变它但没有成功。

以下是我尝试过的,

import asyncio  
import time  
from datetime import datetime

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

我的目标是,只要请求函数花费超过 5 分钟,它就应该返回“不可用”并移至下一次迭代。

谁能帮我做这件事?

提前致谢!

【问题讨论】:

    标签: python python-2.7 asynchronous


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多