2024-05-15 01:58:44 发布
网友
在php中,没有ZMQSocket::close(),而在python中,pyzmq的文档说socket.close()可以省略,因为它将在垃圾收集期间自动关闭。
所以我的问题是,我是否需要手动关闭它?。。。
处理完任何I/O资源后关闭它们总是正确的。垃圾收集器最终会把它们关起来。一旦最后一个引用超出范围,它可能会立即关闭它。它可能会在程序退出时关闭。当您等待它这样做时,资源仍然处于打开状态,占用内存,消耗文件指针,并且通常会占用您的系统资源。对于一个小的,寿命短的程序来说,这可能不是一个大问题,但是如果你的软件寿命长,或者建立了很多连接,这会回来伤害你。
答案是:视情况而定。如果您的系统依赖于套接字被关闭,那么显式地关闭它们会更安全。如果您可以在将来某个不确定的时间关闭套接字,您可以节省一点编码时间,并通过让垃圾收集器处理它来简化程序。
关闭你使用的资源被认为是一种好的方式。
通常情况下,在垃圾收集期间会关闭。但它是调用^{}时的实现细节。在CPython中,有引用计数,对象一旦不再使用就会被丢弃。Jython等其他实现的工作方式可能不同。
An implementation is allowed to postpone garbage collection or omit it altogether – it is a matter of implementation quality how garbage collection is implemented, as long as no objects are collected that are still reachable.
在2.5或2.6中,引入了上下文管理器,以便准确地处理此类问题。从那时起,以这种方式处理文件被认为是一种很好的方式:
with open(...) as f: # do stuff with file object f # now it is automatically closed.
我不知道zeromq,但它可能也支持上下文管理器。
我个人是草率的,如果我工作一行通过命令行,但往往是相当严格的完整程序。显性比隐性好。
当前的文档状态是,关闭套接字(或调用Context.term())是不必要的,因为它是通过垃圾收集自动完成的。
Context.term()
然而,pyzmq changelog states,自从版本14.3.0以来,这不是真的,因为Python 3.4中的更改不允许明智地执行此类操作。
我已经为此提交了一个问题Update docstrings about ^{} and ^{} with regards to garbage collection。
处理完任何I/O资源后关闭它们总是正确的。垃圾收集器最终会把它们关起来。一旦最后一个引用超出范围,它可能会立即关闭它。它可能会在程序退出时关闭。当您等待它这样做时,资源仍然处于打开状态,占用内存,消耗文件指针,并且通常会占用您的系统资源。对于一个小的,寿命短的程序来说,这可能不是一个大问题,但是如果你的软件寿命长,或者建立了很多连接,这会回来伤害你。
答案是:视情况而定。如果您的系统依赖于套接字被关闭,那么显式地关闭它们会更安全。如果您可以在将来某个不确定的时间关闭套接字,您可以节省一点编码时间,并通过让垃圾收集器处理它来简化程序。
关闭你使用的资源被认为是一种好的方式。
通常情况下,在垃圾收集期间会关闭。但它是调用^{} 时的实现细节。在CPython中,有引用计数,对象一旦不再使用就会被丢弃。Jython等其他实现的工作方式可能不同。
在2.5或2.6中,引入了上下文管理器,以便准确地处理此类问题。从那时起,以这种方式处理文件被认为是一种很好的方式:
我不知道zeromq,但它可能也支持上下文管理器。
我个人是草率的,如果我工作一行通过命令行,但往往是相当严格的完整程序。显性比隐性好。
情况正在改变-关闭插座不是自动完成的
当前的文档状态是,关闭套接字(或调用
Context.term()
)是不必要的,因为它是通过垃圾收集自动完成的。然而,pyzmq changelog states,自从版本14.3.0以来,这不是真的,因为Python 3.4中的更改不允许明智地执行此类操作。
我已经为此提交了一个问题Update docstrings about ^{} and ^{} with regards to garbage collection 。
相关问题 更多 >
编程相关推荐