我正在开发一个 django Web 应用程序,用户可以在应用程序本身中使用ace 编辑器通过 UI 修改某些类的代码(可以将其视为 gitlab/github,您可以在其中在线更改代码)。但这些课程在某个时候是由 django 和 celery 工人运行的。
保存代码更改后,由于gunicorn,django 不会选择这些更改,但由于其过程不同,所以与 celery 一起工作正常。(使用本地运行它runserver工作正常,并且 django 和 celery 都会选择更改)。
有没有办法让gunicorn反映包含类的某些目录的更改,而无需重新加载整个应用程序?如果需要重新加载,有没有办法在不停机的情况下,一一重新加载gunicorn的worker?
枪械命令:
/usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:5000 --chdir=/app
Run Code Online (Sandbox Code Playgroud)
wsgi配置文件:
import os
import sys
from django.core.wsgi import get_wsgi_application
app_path = os.path.abspath(os.path.join(
os.path.dirname(os.path.abspath(__file__)), os.pardir))
sys.path.append(os.path.join(app_path, 'an_application'))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)
我能够通过将 python 脚本的扩展名更改为任何内容来解决这个问题.py
然后我使用以下函数加载这些文件:
from importlib import util
from immportlib.machinary import SourceFileLoader
def load_module(module_name, modele_path):
module_path = path.join(path.dirname(__file__), "/path/to/your/files{}.anyextension".format(module_name))
spec = util.spec_from_loader(module_name,
SourceFileLoader(module_name, module_path))
module = util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Gunicorn 不会将它们加载到 RAM 中,我能够动态应用更改,而无需 applyeval或execfunctiong。
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |