我打算创建可以接收大量连接的Web服务器。这10000个连接用户将发送到服务器号码,服务器将这些平方号码返回给用户。 10000个连接太多,异步方法在这里是合适的。 我找到了两个Python 3.4的库,可以提供帮助:
SocketServer的 &安培; ASYNCIO
使用socketserver库,我们可以使用ThreadingMixIn和ForkingMixIn类作为异步处理程序。但这受到核心数量的限制。 另一方面,我们有asyncio库。我不明白它究竟是如何运作的。 我应该使用哪一个?这两个图书馆可以一起工作吗?
答案 0 :(得分:5)
异步编程有不同的方法。
第一种方法是使用线程监视IO操作,并以非阻塞方式管理这些操作。这就是SocketServer
所做的。
第二种方法是使用事件循环和selector监视主线程中的IO操作。这通常是人们谈论异步编程时的意思,这就是asyncio
,twisted
和gevent
所做的事情。
单线程方法有两个优点:
以下是asyncio TCP server (for python 3.5)的示例。在您的情况下,只需使用您自己的实现替换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()
它应该能够轻松处理数以千计的客户。