我在这里做的事情完全超出了我的舒适区,所以希望我只是在做一些愚蠢的事情。
我有一个 Amazon EC2 实例,我用它来运行一个专门的数据库,该数据库是通过 Tomcat 内部提供 REST API 的 web 应用程序控制的。在同一台服务器上,我正在运行一个 Python 脚本,该脚本使用 Requests 库对数据库进行数十万个简单查询(我认为合并查询是不可能的,尽管我接下来会尝试。 )
问题:运行脚本一段时间后,我的 SSH 终端突然出现管道损坏错误。当我尝试使用 SSH 重新登录时,我不断收到“操作超时”错误。所以我什至无法重新登录以终止 Python 进程,而不得不重新启动 EC2 实例(这是一个巨大的痛苦,尤其是因为我使用的是临时存储)
我的理论是,每次请求进行 REST 调用时,它都会激活 Python 和 Tomcat 之间的一对端口,但完成后它永远不会关闭端口。所以 python 一直在尝试获取越来越多的端口,最终要么以某种方式抢走并锁定 SSH 端口(让我关闭),要么它只使用所有端口,导致网络系统以某种方式崩溃(正如我所说,我我已经超出了我的深度。)
我也尝试过使用httplib2
,并且遇到了类似的问题。
有任何想法吗?如果我的端口理论是正确的,有没有办法在完成后强制要求交出端口?或者至少有一种方法可以告诉 Ubuntu 保持 SSH 端口不受限制,以便我至少可以重新登录并终止进程?
或者是否有某种最佳实践来使用 Python 进行大量非常简单的 REST 调用?
编辑:
解决...做:
s = requests.session()
s.config['keep_alive'] = False
在发出请求以强制请求完成后释放连接之前。