django 把所有文件加载 2 遍?

2014-09-12 15:40:06 +08:00
 rcmerci
是这样的:
我在某个py文件里开了一个守护线程,一运行发现开了2个。。。

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

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

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

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

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

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

Django本质上是一个Web框架. 你用这个思路回头看看你的原帖内容. 合理不?
rcmerci
2014-09-12 17:58:07 +08:00
@xiaket 哦。。一时手快忘写了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/133085

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX