在使用Python连接数据库、sftp等时,我们需要在连接使用完成后或执行重连时关闭连接对象以回收资源。那么该如何优雅的来关闭这些连接对象或游标呢?
以SFTP连接为例做一个示例:
import paramiko
try:
ssh_conn = paramiko.Transport((host, port))
ssh_conn.connect(username=username, password=password)
sftp_client = paramiko.SFTPClient.from_transport(ssh_conn)
sftp_client.get(sftp_file, local_file)
except Exception as e:
# do something
pass
finally:
if hasattr(sftp_client, "close") and callable(sftp_client.close):
sftp_client.close()
if hasattr(ssh_conn, "close") and callable(ssh_conn.close):
ssh_conn.close()
在try中进行ssh连接及sftp连接,并进行连接后的操作,except中捕获异常,finally中无论两个连接对象获取是否成功都会执行,关闭ssh及sftp连接。
先使用hasattr
方法及callable
判断对象是否存在close
方法且是否可调用,再调用close
方法关闭连接对象,避免某个连接失败时调用close
方法出现错误。
以上方式同样适用于其他连接,比如MySQL的连接对象及游标对象的关闭。
网友评论