簡體   English   中英

我應該使用哪個 Python 庫? SocketServer 還是 Asyncio?

[英]Which Python library should I use? SocketServer or Asyncio?

我將創建可以接收大量連接的 Web 服務器。 這 10000 個連接的用戶將發送到服務器號碼,服務器將這些平方數返回給用戶。 10000 個連接太多了,這里使用異步方法是合適的。 我找到了兩個適用於 Python 3.4 的庫,它們可以提供幫助:

套接字服務器和異步

使用 socketserver 庫,我們可以使用 ThreadingMixIn 和 ForkingMixIn 類作為異步處理程序。 但這受到內核數量的限制。 另一方面,我們有 asyncio 庫。 我不明白它到底是如何工作的。 我應該使用哪一種? 這兩個庫可以一起工作嗎?

異步編程有不同的方法。

第一種方法是使用線程來監控 IO 操作,並以非阻塞方式管理這些操作。 這就是SocketServer所做的。

第二種方法是使用事件循環和選擇器來監視主線程中的 IO 操作。 這通常是人們談論異步編程時的意思,這就是asynciotwistedgevent所做的。

單線程方法有兩個優點:

  • 它限制了競爭條件的風險,因為回調在同一線程中運行
  • 它擺脫了為每個客戶端創建一個線程的開銷(參見10K 問題

這是asyncio TCP 服務器的示例。 在您的情況下,只需用您自己的實現替換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()

它應該能夠輕松處理數以千計的客戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM