python - 我应该在发送 udp 数据后处理一个套接字吗?

python - should I dispose a socket after sending udp data?

我有一个侦听事件的方法,每次事件发生时,它应该将数据发送到套接字(它的 udp,所以我不检查是否收到数据)。

我在 event_handler 中的内容是:

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

在我看来我需要创建一个新套接字每次事件被调用,因为我不知道两个事件之间会经过多少时间,所以有全局套接字变量并在事件上发送数据不保证套接字仍然可用。

问题是,因为我每次都创建套接字,我应该在发送数据后 dispose/close 它吗?使用后处理或关闭套接字的最佳方法是什么?

It seems to me that I need to create a new socket everytime the event is called,

不用,重复使用之前的socket就可以了。请记住 UDP 套接字是无连接的,因此您对断开连接的担忧不适用。

The thing is, because I create the socket everytime, should I dispose/close it after sending the data?

是的,如果您要创建无数个套接字,请在创建时关闭它们。否则,您将 运行 文件描述符槽不足,这是您进程中的有限资源。

正如 Rob 已经解释的那样,您不一定需要每次都创建一个新套接字。

根据文档 (https://docs.python.org/3/library/socket.html):

Sockets are automatically closed when they are garbage-collected, but it is recommended to close() them explicitly, or to use a with statement around them.

因此,如果您每次都选择 create/close,您可以这样做:

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