2010-05-10 49 views
0

我在同一時間在Python中使用線程和xmlrpclib。定期地,我創建了一堆線程來通過xmlrpclib在遠程服務器上完成一項服務。問題是,有些時候遠程服務器沒有回答。這導致線程永遠等待一個永遠不會得到的響應。隨着時間的推移,處於這種狀態的線程數量會增加,並且會達到系統允許線程的最大數量(我正在使用Fedora)。 我試圖使用socket.setdefaulttimeout(10);但由此創建的異常將導致服務器停止運行。我用它在服務器端,但它似乎不工作:/由於同步通信造成太多線程

任何想法,我該如何處理這個問題呢?

回答

0

看起來你真正的問題是服務器掛起某些請求,如果客戶端關閉套接字,就會死掉 - 線程只是實現的副作用。如果我理解你說的正確,那麼解決這個問題的唯一方法就是修復服務器以響應所有請求,或者在網絡故障時或者(最好)兩者都更加健壯。

1

你正在做我通常所說的(最初是西班牙語xD)「快樂的道路規劃」。你應該實現你的程序來處理不想要的情況,而不僅僅是你想要發生的情況。

的此線程只顯示一個基本錯誤:您的服務器無法處理超時,並實現在加上超時導致服務器崩潰的方式剛性由於未處理的異常。

更有力地實現它:它必須能夠承受一個例外,因爲行爲不端的客戶端的服務器不能死。如果您現在不解決這類問題,那麼您以後可能會遇到類似的問題。