V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
rcmerci
V2EX  ›  Python

django 把所有文件加载 2 遍?

  •  
  •   rcmerci ·
    RCmerci · 2014-09-12 15:40:06 +08:00 · 3728 次点击
    这是一个创建于 3727 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样的:
    我在某个py文件里开了一个守护线程,一运行发现开了2个。。。

    问下v友,怎么样才可以保证只开一个守护线程?(我不想要太奇怪的方法= =)

    顺便问一下,在服务器上跑起来的话(nginx+uwsgi+django),nginx,uwsgi和django,是怎么个关系?比如10个uwsgi,是nginx的子进程吗,然后uwsgi和django又是什么关系?
    thx
    13 条回复    2014-09-12 17:58:07 +08:00
    xiaket
        1
    xiaket  
       2014-09-12 16:01:43 +08:00   ❤️ 1
    Django里面没有奇怪的逻辑. 是用法问题. 而且你给的内容让人没法猜.

    正常的话, nginx提供反代, uwsgi是http服务器, django和你的代码是具体的逻辑.
    rcmerci
        2
    rcmerci  
    OP
       2014-09-12 16:12:22 +08:00
    @xiaket 擦。。。我的表达不行吗。。
    比如我在项目根目录下的__init__.py里print 111,
    然后manage.py runserver ,就会print 2次 111
    shoumu
        3
    shoumu  
       2014-09-12 16:13:30 +08:00   ❤️ 1
    只开一个的话你可以尝试和一个端口绑定
    rcmerci
        4
    rcmerci  
    OP
       2014-09-12 16:14:22 +08:00
    @shoumu 所以这是大家的做法吗?我搜了google上也有人这么干
    shoumu
        5
    shoumu  
       2014-09-12 16:14:27 +08:00
    yueyoum
        6
    yueyoum  
       2014-09-12 17:08:19 +08:00   ❤️ 1
    LZ 你没发现 python manage.py runserver 后,你修改文件, runserver 会自动重启吗?

    这是因为 runserver 是开发者模式, 会启动两个django进程,所以你的代码被执行了两次。

    不过 你写的守护进程在启动的时候 不要先判断一下自身是否被启动呢?如果启动那么就直接推出
    rcmerci
        7
    rcmerci  
    OP
       2014-09-12 17:14:03 +08:00
    @yueyoum 怎么判断呢?弄个变量判断?还是怎样
    lu18887
        8
    lu18887  
       2014-09-12 17:27:24 +08:00   ❤️ 1
    @yueyoum 这个说法不够准确,还得看具体的配置文件中DEBUG是否设置成True or False的
    yueyoum
        9
    yueyoum  
       2014-09-12 17:28:07 +08:00   ❤️ 1
    @rcmerci

    running=`ps -ef | grep YOUR_PROGRAM_NAME | wc -l`
    if [[ running -eq 2 ]]
    then
    exit 0
    else
    START YOUR PROGRAM
    fi


    这是一段bash
    但思路是通用的,直接判断这个daemon程序的进程是否存在
    yueyoum
        10
    yueyoum  
       2014-09-12 17:28:28 +08:00
    @lu18887

    恩,你说的对
    wibile
        11
    wibile  
       2014-09-12 17:30:15 +08:00   ❤️ 1
    xiaket
        12
    xiaket  
       2014-09-12 17:34:07 +08:00   ❤️ 1
    @rcmerci 你都不说是runserver, 要不是你在回复里写了runserver, 其他人怎么知道...

    Django本质上是一个Web框架. 你用这个思路回头看看你的原帖内容. 合理不?
    rcmerci
        13
    rcmerci  
    OP
       2014-09-12 17:58:07 +08:00
    @xiaket 哦。。一时手快忘写了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3882 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:33 · PVG 18:33 · LAX 02:33 · JFK 05:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.