我有一个监听事件的方法,每次事件发生时,它都应该将数据发送到套接字(它的udp,所以我不检查是否收到了数据)。
我在event_handler中拥有的是:
socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socket.sendto(data, (IP, PORT))
在我看来,我需要创建一个新的套接字每次调用该事件,因为我不知道两个事件之间会经过多长时间,所以拥有全局套接字变量并发送事件数据不保证套接字仍在运行。
问题是,因为我每次创建套接字,我应该在发送数据后处理/关闭它吗?使用后处理或关闭插座的最佳方法是什么?
答案 0 :(得分:2)
正如Rob已经解释的那样,您不一定每次都需要创建一个新的套接字。
根据文档(https://docs.python.org/3/library/socket.html):
套接字在垃圾回收时会自动关闭,但是 建议明确关闭(),或使用with 他们周围的声明。
因此,如果您选择每次创建/关闭,您可以执行以下操作:
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as socket:
socket.sendto(data, (IP, PORT))
答案 1 :(得分:1)
在我看来,每次调用事件时我都需要创建一个新的套接字,
不,可以重复使用以前的套接字。请记住,UDP sockekts是无连接的,因此您对断开连接的担忧并不适用。
问题是,因为我每次创建套接字,我应该在发送数据后处理/关闭它吗?
是的,如果您要创建一个数量众多的套接字,请随时关闭它们。否则,您将耗尽文件描述符槽,这是您流程中的有限资源。