2017-01-11 29 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套接字,请在您离开时关闭它们。否则,您将耗尽文件描述符插槽,这是您进程中的有限资源。

相关问题