2015-05-10 121 views
0

我有一個python程序,我使用服務器套接字發送數據。有一個類有一些Threading方法。每種方法都會檢查一個隊列,如果隊列不是空的,它會通過服務器套接字發送數據。隊列正在填充客戶端發送到服務器的內容(服務器正在監聽輸入請求)。發送與方法調用來完成:通過python中的單個套接字多次發送數據

def send(self, data): 
    self.sqn += 1 
    try: 
     self.clisock.send(data) 
    except Exception, e: 
     print 'Send packet failed with error: ' + e.message 

程序啓動時,發送速率大約是500,但經過一段時間它會立即下降到30與此異常:

Send packet failed with error: <class 'socket.error'>>>[Errno 32] Broken pipe 

我不知道導致費率增加的原因!任何想法?

+0

您可以嘗試捕獲此異常並相應地關閉套接字,這可能會增加發送速率。 –

回答

1

該錯誤來自您的發送函數嘗試寫入另一側關閉的套接字。如果打算然後使用

import errno, socket 
try: 
    self.clisock.send(data) 
except socket.error, err: 
    if err[0] == errno.EPIPE: 
     # do something 
    else: 
     pass # do something else 

如果不打算對客戶端的部分行爲,那麼你就必須更新與相應的客戶端代碼,您的文章捕獲異常。

相關問題