gpt4 book ai didi

python - 我应该使用哪个 Python 库? SocketServer 还是 Asyncio?

转载 作者:行者123 更新时间:2023-12-05 01:19:24 26 4
gpt4 key购买 nike

我将创建可以接收大量连接的网络服务器。这 10000 个连接的用户将发送到服务器编号,服务器将把这些平方数返回给用户。10000 个连接太多了,异步方法在这里是合适的。我找到了两个适用于 Python 3.4 的库,它们可以提供帮助:

套接字服务器&异步

通过 socketserver 库,我们可以使用 ThreadingMixIn 和 ForkingMixIn 类作为异步处理程序。但这受到核心数量的限制。另一方面,我们有 asyncio 库。而且我不明白它到底是如何工作的。我应该使用哪一个?这两个库可以协同工作吗?

最佳答案

异步编程有不同的方法。

第一种方法是使用线程监视 IO 操作,并以非阻塞方式管理这些操作。这就是 SocketServer 所做的。

第二种方法是使用事件循环和 selector 监视主线程中的 IO 操作。 .这通常是人们谈论异步编程时的意思,而这正是 asynciotwistedgevent 所做的。

单线程方法有两个优点:

  • 它限制了竞争条件的风险,因为回调在同一个线程中运行
  • 它消除了为每个客户端创建一个线程的开销(参见 10K problem)

这是一个 asyncio TCP server 的例子.在您的情况下,只需将 handle_echo 协程替换为您自己的实现即可:

async def handle_client(reader, writer):
data = await reader.readline()
result = int(data.decode().strip()) ** 2
writer.write(str(result)).encode())
writer.close()

它应该能够轻松处理数以千计的客户端。

关于python - 我应该使用哪个 Python 库? SocketServer 还是 Asyncio?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40158596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com