如何关闭Boto S3的连接?

Ste*_*rta 23 python security amazon-s3 boto amazon-web-services

我正在使用Boto在我的Python程序中连接到Amazon S3.我可以打开连接并将文件上传到存储桶.我认为我应该关闭连接以释放资源,更重要的是,避免任何安全风险,让开放的连接闲置.我以为我应该调用close()方法.但我测试了如下:1.打开连接.2.关闭连接.3.将文件上传到存储桶.

我认为第3步会失败,但上传工作了!那么close()做什么呢?如果它没有真正关闭连接,我应该用什么代替close()?或者只是不必关闭连接?

我在Boto教程,Boto API参考这篇StackOverflow帖子中找到了答案,但到目前为止还没有运气.

谢谢你的帮助.

gar*_*aat 9

您的步骤3有效,因为boto具有将自动重新打开已关闭连接并重试错误请求的代码.手动关闭boto连接几乎没有什么好处,因为它们只是HTTP连接,并且会在几分钟的空闲时间后自动关闭.我不担心试图关闭它们.


jto*_*ron 5

在幕后,boto 使用 httplib。此客户端库支持 HTTP 1.1 Keep-Alive,因此它可以并且应该保持套接字打开,以便它可以通过同一连接执行多个请求。

connection.close()实际上并没有关闭底层套接字。相反,它删除了对 httplib 连接的底层池的引用,这允许垃圾收集器在它们上运行,这就是实际套接字关闭发生的时间。

显然,您也可以通过不保留对 boto 连接本身的引用来让垃圾收集器运行。但是重用 boto 连接有性能优势(例如,请参阅上面的 Keep-Alive 注释)。

幸运的是,在大多数情况下,您不必connection.close()显式调用。有关您必须调用 close 的一种情况的更多详细信息,请参阅我对问题中链接的 StackOverflow 帖子的回答。