MST

星途 面试题库

面试题:Python异步TCP客户端中如何处理连接超时

在使用Python实现异步TCP客户端时,为了避免长时间等待无效连接,需要设置连接超时机制。请描述如何在Python的异步编程框架(如asyncio)中实现这一功能,并给出关键代码示例。
37.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 使用asyncio实现连接超时机制的描述
    • asyncio中,可以使用asyncio.wait_for函数来设置连接操作的超时时间。asyncio.wait_for接受两个参数,第一个是一个awaitable对象(在这里就是连接操作的awaitable),第二个是超时时间(以秒为单位)。如果在指定的超时时间内awaitable对象没有完成,asyncio.wait_for会引发TimeoutError异常。
  2. 关键代码示例
import asyncio


async def tcp_client():
    try:
        # 尝试连接服务器,设置超时时间为5秒
        reader, writer = await asyncio.wait_for(asyncio.open_connection('127.0.0.1', 8888), timeout = 5)
        writer.write(b'Hello, server!')
        await writer.drain()
        data = await reader.read(100)
        print(f"Received: {data.decode()}")
        writer.close()
        await writer.wait_closed()
    except TimeoutError:
        print("Connection timed out")


if __name__ == '__main__':
    asyncio.run(tcp_client())

上述代码中,asyncio.wait_for函数将asyncio.open_connection操作限制在5秒内完成。如果连接操作超过5秒未完成,就会捕获TimeoutError异常并打印“Connection timed out”。