Управление ресурсами с помощью оператора внутри генератора PythonPython

Программы на Python
Anonymous
Управление ресурсами с помощью оператора внутри генератора Python

Сообщение Anonymous »

Сегодня во время программирования я обнаружил, что управляю ресурсом (ssh-соединением) внутри функции-генератора, что-то похожее на следующее:

Код: Выделить всё

def _yield_fname(host_address, usr, pwd, datapath):
with paramiko.SSHClient() as ssh_client:

ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(host, username=usr, password=pwd)

stdin, stdout, stderr = ssh_client.exec_command(
'find . -type d -maxdepth 1 -printf "%f\n"'
)
for line in stdout:
yield fname

def get_foos():

foos= []
for fname in self._yield_fname(self.FOO_PATH):
foos.append(Foo.from_fname(fname))

return foos

def get_bars():

bars= []
for fname in self._yield_fname(self.FOO_PATH):
bars.append(Bar.from_fname(fname))

return bars
Плохо ли управлять ресурсом внутри функции-генератора таким образом?
В моем случае я планирую всегда использовать yield_fname от начала до конца, чтобы соединение всегда было закрыто. Должен ли я беспокоиться о том, что кто-то (например, я в будущем) воспользуется генератором, не израсходовав его полностью и оставив соединение открытым? Есть ли способ предотвратить это?
(Кстати, здесь я решил использовать функцию генератора, потому что хотел избежать повторения списка имен файлов два или более раз).

Подробнее здесь: https://stackoverflow.com/questions/788 ... -generator

Вернуться в «Python»