django 的 web 应用如何先跑一个程序呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ohazyi
V2EX    Django

django 的 web 应用如何先跑一个程序呢?

  •  
  •   ohazyi 2019-02-25 22:18:00 +08:00 3711 次点击
    这是一个创建于 2450 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我 train 了一个 model,想在 django 的 web 应用加载之前先 import 之前的这些代码(这些代码比较耗时),想请问一下 django 可以做到先执行一个代码吗?(不想每次 get 到请求再都去执行那一段)

    17 条回复    2019-02-26 21:42:42 +08:00
    ohazyi
        1
    ohazyi  
    OP
       2019-02-25 22:40:20 +08:00
    就是可不可以在 run 这个 server 的时候就先执行某一段代码呢?
    petelin
        2
    petelin  
       2019-02-25 22:43:53 +08:00 via iPhone   1
    两种方法一种 对你来说简单点 另创建一个接口 init 用来跑初始化 然后全局变量共享给 get

    还有就是再代码里控制什么时候 start server
    petelin
        3
    petelin  
       2019-02-25 22:44:36 +08:00 via iPhone
    还有一种是 Django 应该有 before start 这种钩子函数 也可以
    zyqzyq08
        4
    zyqzyq08  
       2019-02-25 22:51:24 +08:00 via Android
    ready
    rogwan
        5
    rogwan  
       2019-02-25 23:02:33 +08:00 via Android
    是不是应该反过来考虑,先启动加载这个 model,完了之后再 run django ?
    ohazyi
        6
    ohazyi  
    OP
       2019-02-25 23:12:12 +08:00
    @petelin 请问一下这个 init 接口是在什么时候执行呢?先有一个这样的 init 请求过去,然后再访问其它我想要的这些 get 请求吗?
    ohazyi
        7
    ohazyi  
    OP
       2019-02-25 23:13:29 +08:00
    @rogwan 嗯是这么考虑的,但不知道这个在 django 里怎么操作“先启动加载这个 model ”
    Seahurt
        8
    Seahurt  
       2019-02-25 23:34:25 +08:00 via Android
    gunicorn 里有一些 server hook 函数可用
    applehater
        9
    applehater  
       2019-02-25 23:53:21 +08:00
    @petelin 这种会重复启动两个进程的
    KgM4gLtF0shViDH3
        10
    KgM4gLtF0shViDH3  
       2019-02-26 08:49:24 +08:00 via iPhone
    以前写 py 的时候记得 django 有个 command 什么的
    petelin
        11
    petelin  
       2019-02-26 09:37:43 +08:00 via iPhone
    @applehater 那种?
    37Y37
        12
    37Y37  
       2019-02-26 09:39:13 +08:00
    Django signals,看一下 connection_created 数据库建立连接时触发,这里有文章介绍:
    https://mp.weixin.qq.com/s/cMxdAfsTno56ixurmD4KXA
    metamask
        13
    metamask  
       2019-02-26 10:02:25 +08:00
    实例化之后,直接 import 到 view 层
    midasplus
        14
    midasplus  
       2019-02-26 10:16:39 +08:00
    qqxx520
        15
    qqxx520  
       2019-02-26 11:20:40 +08:00   1
    直接在 urls.py 或者 models.py 里 import 一下,如果是个函数,执行一下。
    另一种方法,每个 app 里边有一个 apps.py ,里边有一个 AppConfig 的子类,在这个子类里有一个函数叫 ready(). 把预先初始化的代码写在 ready()里,也可以.
    ohazyi
        16
    ohazyi  
    OP
       2019-02-26 15:05:25 +08:00
    @qqxx520 感谢,我试一下~
    applehater
        17
    applehater  
       2019-02-26 21:42:42 +08:00 via iPhone
    @petelin 就是直接在模块 init 方法启动,开发模式会启动两次的,其他 uwsgi 就会几个进程启动几次了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3400 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:42 PVG 12:42 LAX 20:42 JFK 23:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86