我正在用Django开发一个内部服务器监视/管理工具,对此我不太熟悉。
该应用程序通常需要通过SSH连接到其他服务器,发出命令并读取响应。目前,我使用paramiko进行此操作,效果很好。

但是,现在我针对每个请求都重新连接到每个服务器。这感觉像是糟糕的设计,我宁愿在应用程序的整个生命周期中保持所有SSH连接(很少)持久。我知道这在例如NodeJS中是可能的。

即我想要做的是能够访问某种“全局”变量“ssh_connection1”并通过它发出命令,而不是在每次请求时都创建一个新的本地变量。

在Django中有可能吗?您对此有更好的解决方案吗?

注意:我看到了类似的问题,但是它们主要涵盖了在请求之间保存数据而不是连接。

最佳答案

正如Andrew Gorcester所建议的那样,您可以实现另一个将与服务器通信并获取信息的进程/守护程序。它还会将信息推送到数据库中,您的django应用将使用该信息来显示该数据库。
这样,您可以分离出实现以在单独的模块中检索数据。

此外,您可以在django中将守护程序实现为您自己的自定义管理命令,以利用django的优点(相同的模型,方法等),请参考Writing admin commands。您可以通过cron或init脚本运行此命令。

10-07 19:16
查看更多