Считается хорошим стилем для закрытия используемых вами ресурсов.
Обычно вещи закрываются во время сбора мусора. Но это деталь реализации, когда вызывается __del__()
. В CPython у вас есть подсчет ссылок, и объекты отбрасываются, как только они больше не используются. Другие реализации как Jython и т. Д. Могут работать по-другому.
Реализация разрешено отложить вывоз мусора или опустить его в целом - это вопрос качества реализации, как осуществляется сбор мусора, пока не будут собраны никакие объекты, которые по-прежнему доступен.
В 2.5 или 2.6 были введены контекстные менеджеры, чтобы справиться с такими проблемами. С тех пор он считается GOOT стиль работы с файлами таким образом:
with open(...) as f:
# do stuff with file object f
# now it is automatically closed.
Я не знаю ZeroMQ, но это может быть, что он имеет поддержку для менеджеров контекста, а также.
Я лично неаккуратно, если я работаю один-линейный через командную строку, но, как правило, довольно строг в полных программах. Лучше быть явным, чем неявным.
I Противоположно второму сенарио, о котором вы говорили выше. В процессе daemon я открою сокет zmq и удерживаю эту ссылку до тех пор, пока процесс не будет остановлен, например. получать SIGTERM. В этот момент я должен явно вызвать socket.close() или позволить gc выполнить задание? –
@Jerry: В этом случае просто прекратите процесс. Ресурсы будут освобождены операционной системой. ZMQ будет решать, что к чему. Кроме того, GC обычно будет пытаться очистить столько, сколько может при таких обстоятельствах. –