我 train 了一个 model,想在 django 的 web 应用加载之前先 import 之前的这些代码(这些代码比较耗时),想请问一下 django 可以做到先执行一个代码吗?(不想每次 get 到请求再都去执行那一段)
1
ohazyi OP 就是可不可以在 run 这个 server 的时候就先执行某一段代码呢?
|
2
petelin 2019-02-25 22:43:53 +08:00 via iPhone 1
两种方法一种 对你来说简单点 另创建一个接口 init 用来跑初始化 然后全局变量共享给 get
还有就是再代码里控制什么时候 start server |
3
petelin 2019-02-25 22:44:36 +08:00 via iPhone
还有一种是 Django 应该有 before start 这种钩子函数 也可以
|
4
zyqzyq08 2019-02-25 22:51:24 +08:00 via Android
ready
|
5
rogwan 2019-02-25 23:02:33 +08:00 via Android
是不是应该反过来考虑,先启动加载这个 model,完了之后再 run django ?
|
6
ohazyi OP @petelin 请问一下这个 init 接口是在什么时候执行呢?先有一个这样的 init 请求过去,然后再访问其它我想要的这些 get 请求吗?
|
8
Seahurt 2019-02-25 23:34:25 +08:00 via Android
gunicorn 里有一些 server hook 函数可用
|
9
applehater 2019-02-25 23:53:21 +08:00
@petelin 这种会重复启动两个进程的
|
10
KgM4gLtF0shViDH3 2019-02-26 08:49:24 +08:00 via iPhone
以前写 py 的时候记得 django 有个 command 什么的
|
11
petelin 2019-02-26 09:37:43 +08:00 via iPhone
@applehater 那种?
|
12
37Y37 2019-02-26 09:39:13 +08:00
Django signals,看一下 connection_created 数据库建立连接时触发,这里有文章介绍:
https://mp.weixin.qq.com/s/cMxdAfsTno56ixurmD4KXA |
13
freakxx 2019-02-26 10:02:25 +08:00
实例化之后,直接 import 到 view 层
|
14
111qqz 2019-02-26 10:16:39 +08:00
|
15
qqxx520 2019-02-26 11:20:40 +08:00 1
|
17
applehater 2019-02-26 21:42:42 +08:00 via iPhone
@petelin 就是直接在模块 init 方法启动,开发模式会启动两次的,其他 uwsgi 就会几个进程启动几次了
|