【发布时间】:2020-10-31 11:02:40
【问题描述】:
我有一个有趣的问题。我正在使用 IIS+FastCgi+Django 设置来提供查询服务。最初,我希望并发执行,但有一个组件 X 不允许其多次调用,因为并行调用时其许可证检查代码明显失败。为了确保只有 1 个 django 实例运行,我计划执行以下操作:
- IIS:据我检查,它与并发没有任何直接关系。我可能错了。
- IIS 中的 FastCGI 模块:
最大实例:1(我认为这意味着 fastcgi 只会加载 1 内存中的 django 应用程序代码库。)
实例最大请求:200(这将确保在我上面 内存中 django 应用程序的代码库按顺序处理 200 个请求,它会破坏 自己并重新启动。)为什么这种回收是必要的?
队列长度:1000(这将创建传入请求的积压 即使它们来自多个来源,它也会确保 他们不会立即被拒绝)
- Django:现在这个组件 X 需要大约 1-2 秒来加载自己,所以我不能把它的加载代码放在 POST 视图函数中。我打算把它放在 app.py 中的一个类中,该类从 django.apps 的 AppConfig 扩展,就像人们加载机器学习模型一样。这样,当 FASTCGI worker 将 django 应用程序代码库加载到内存中时,它只会被加载一次。
问题是200次请求后,fast cgi什么时候回收或者销毁?加载的 django 代码库,我也需要销毁组件 X 实例。但是,我对这方面不太了解。
这个组件X(它是一个windows应用程序)的加载方式是:
X = library.sdk("name") // 这基本上打开了一个连接 应用程序的 com 对象。
要销毁这个组件,官方文档说要这样做:
X.close()
这个 X.close() 代码在 django 中的什么地方?另外,如果我的想法有误,请随时纠正我。
编辑:添加赏金
【问题讨论】:
-
如果您将连接附加到一个类,您可以随时将其挂接到该类的
__del__方法中。更多信息:geeksforgeeks.org/destructors-in-python