2010-10-28 63 views
1

在Python中一次處理大量連接的最佳方式是什麼?我想到的第一種方法是線程化,這種方法很有效,但每個線程的內存爲10MB,而且相當昂貴。python sockets,什麼是一次處理多個連接的最佳方式?

還有什麼別的辦法在那裏一次處理大量的連接?

我看到不使用線程的唯一問題是,使用socket.recv()等待來自protocolar客戶數據,因此一個線程處理幾個客戶是行不通的。

但是,這就是爲什麼我問這個問題,什麼處理多個連接的最佳方式?

謝謝!

回答

5

一個很好的替代線程,如果你有一個真正的大量的併發連接,是進行回調的臺異步/基於事件的方法。

的Python已經用於此目的的非常成熟和強大的庫/框架 - Twisted。還有一個使用標準庫asyncore模塊的更簡單的解決方案。從它的文檔:

該模塊提供了基本的基礎設施 寫 異步Socket服務客戶 和服務器。

只有兩種方法來對單個處理器的 程序做「同時更 超過一兩件事。」 多線程編程是做 它 最簡單,最普遍的方式,但也有是另一種非常 不同的技術,可以讓你 有 多線程的幾乎所有優點,而無需實際 使用多線程。這真的是 只適用於如果你的程序是 大部分I/O限制。如果你的程序是 處理器綁定,那麼優先 調度線程可能是你真正需要的 。但是,網絡服務器很少與處理器綁定。

通常,異步套接字服務器最近是一個非常熱門的話題(node.js作爲證人炒作),我相信你可以在網上找到很多有趣的資料。

相關問題