欢迎访问宙启技术站
智能推送

Python中使用TimeoutError()异常的实际案例

发布时间:2023-12-24 14:18:17

TimeoutError是Python中的一个内建异常类,用于表示在预定的时间内没有完成操作引发的异常。

它通常用于处理网络请求、多线程、多进程等场景中,如果一个操作在一定的时间内没有得到响应或者完成,那么就会引发TimeoutError异常。

下面是一个使用TimeoutError异常的实际案例:

import requests
from multiprocessing import Pool
from functools import partial
import time

def send_request(url, timeout):
    try:
        response = requests.get(url, timeout=timeout)
        return response.text
    except requests.exceptions.Timeout:
        raise TimeoutError(f"Request to {url} timed out after {timeout} seconds.")

def process_urls(urls, timeout=5):
    pool = Pool(processes=4)
    func = partial(send_request, timeout=timeout)
    results = pool.map(func, urls)
    pool.close()
    pool.join()

    for result in results:
        if isinstance(result, TimeoutError):
            print(result)
        else:
            print(result[:100])

if __name__ == "__main__":
    urls = [
        "https://www.google.com",
        "https://www.baidu.com",
        "https://www.python.org",
        "https://www.github.com",
        "https://www.example.com",
        "https://www.timeout.com"
    ]

    start_time = time.time()
    process_urls(urls, timeout=2)
    end_time = time.time()
    print(f"Total time: {end_time - start_time} seconds")

上述代码中,我们使用了requests库来发送HTTP请求,通过设定timeout参数来设置超时时间。如果在指定的时间内没有得到响应,requests库会引发requests.exceptions.Timeout异常。

send_request函数中,我们捕捉requests.exceptions.Timeout异常,并抛出自定义的TimeoutError异常,并在异常中附上请求的URL和超时时间。

process_urls函数中,我们使用multiprocessing.Pool来创建一个线程池,然后使用pool.map方法来并行发送请求。在并行处理过程中,如果有请求超时,我们就会得到一个TimeoutError异常对象,可以对其进行相应的处理,比如记录日志或者终止进程。

在运行上述代码时,我们设置了超时时间为2秒,在发送网络请求的过程中,如果某个请求在2秒内没有得到响应,就会引发TimeoutError异常,并在主进程中捕获并处理。

这是一个简单的实例,展示了在python中如何使用TimeoutError异常来处理请求超时的问题。实际上,在网络通信、并发编程等场景中,TimeoutError异常是非常有用的,它可以帮助我们在合理的时间范围内控制操作的执行,避免长时间等待或者无限阻塞的情况发生。