2017-01-11 68 views
0

我有一個偵聽事件的方法,每次事件發生時,它都應該發送數據到套接字(它的udp,所以我不檢查數據是否被接收)。python - 我應該在發送udp數據後處理套接字嗎?

我有什麼在event_handler是這樣的:

socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    socket.sendto(data, (IP, PORT)) 

在我看來,我需要建立一個新的socket 每次該事件被稱爲,因爲我不知道多少時間兩個事件之間傳遞,因此,有一個全局套接字變量,併發送事件數據不保證插座仍上漲。

的事情是,因爲我創建套接字每次,我應該在發送數據後處理/關閉呢?使用後處理或關閉插槽的最佳方式是什麼?

+0

你所說的「插座仍達」呢?套接字afaik沒有「上」或「下」狀態。 –

回答

1

正如Rob已經解釋的那樣,您不一定每次都需要創建一個新的套接字。

按照文檔(https://docs.python.org/3/library/socket.html):

當他們垃圾收集套接字會自動關閉,但 建議明確關閉()他們,或者使用與周圍 聲明。

因此,如果您選擇創建/關閉每一次,你可以做這樣的事情:

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as socket: 
    socket.sendto(data, (IP, PORT)) 
1

在我看來,我需要建立一個新的socket每次事件被稱爲,

不,它是確定重新使用以前的插座。記住UDP sockekts是無連接的,所以你關心的斷開連接不適用。

問題是,因爲我每次創建套接字,我應該在發送數據後處置/關閉它嗎?

是的,如果您打算創建一個zillion套接字,請在您離開時關閉它們。否則,您將耗盡文件描述符插槽,這是您進程中的有限資源。

相關問題