django多次初始化的问题

113 views
Skip to first unread message

李亚欧 (LI,Yaou)

unread,
Dec 14, 2009, 2:03:42 AM12/14/09
to pyth...@googlegroups.com
hi  大家好,

最近用django开发过程当中遇到一个很头痛的问题,django的setting.py代码,还有加载的apps中的__init__.py代码会
被多次加载运行。不知道大家是否遇到过类似的问题

在一个加载的app的__init__.py中,我启动了一个守护线程,用来运行一个msn机器人。但msn机器人的状态
很不稳定,debug发现其实有多个msn的守护线程同时存在。
进而发现,在开发环境中,用python manager.py runserver 会出现两个msn线程,如果用--noreload参数可以
实现只有一个msn线程存在,但是在部署环境中,apache+mod_wsgi+django, 发现会出现2-3个msn线程。
暂时还没搞明白什么原因导致的,不知道大家可有解决办法

谢谢
yaou


诚子

unread,
Dec 14, 2009, 2:08:26 AM12/14/09
to pyth...@googlegroups.com
楼主讲的是 进程 还是 线程 ?


2009/12/14 李亚欧 (LI,Yaou) <li...@hualu.com.cn>


--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:pyth...@googlegroups.com
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp



--
my.unix-center.net/~WeiZhicheng

Yaou

unread,
Dec 14, 2009, 2:12:21 AM12/14/09
to pyth...@googlegroups.com
运行msn的是线程

我本地开发的情况是python manager.py runserver会出现两个django的进程,然后各自启动一个msn的线程

2009/12/14 诚子 <zhiche...@gmail.com>

诚子

unread,
Dec 14, 2009, 2:37:08 AM12/14/09
to pyth...@googlegroups.com

Yaou

unread,
Dec 14, 2009, 5:20:56 AM12/14/09
to pyth...@googlegroups.com
仔细看了这篇文章,确实让我搞明白了对于开发环境中,出现两个msn线程的原因
可对于apache+mod_wsgi+django环境下,出现多个msn线程的这个原因还是没找到

anyway,多谢,刚刚的文章对我还是有很大的帮助  :)


2009/12/14 诚子 <zhiche...@gmail.com>

yuting cui

unread,
Dec 14, 2009, 7:02:05 AM12/14/09
to pyth...@googlegroups.com
2009/12/14 Yaou <yao...@gmail.com>:

> 仔细看了这篇文章,确实让我搞明白了对于开发环境中,出现两个msn线程的原因
> 可对于apache+mod_wsgi+django环境下,出现多个msn线程的这个原因还是没找到
>
> anyway,多谢,刚刚的文章对我还是有很大的帮助 :)
>
>
应该是你的wsgi跑了多个守护进程造成,设置发上来看看?
不过对你说的这种情况,最好还是把msn的写成守护进程,到时候让django进程去连就好了
--
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
G! d- s:->: a- C++(++++)$
UL++++ P L++(++++) E(++)
W+(+++) N+ o? K? w++(+++)
!O !M V? PS PE Y+ PGP !t
!5 !X R !tv b++ DI+ D+
G e* h+ r* y?
------END GEEK CODE BLOCK------

Yaou

unread,
Dec 14, 2009, 7:13:17 AM12/14/09
to pyth...@googlegroups.com
没错,我是刚刚明白是wsgi的多个守护进程造成的,但想了半天有两个思路但还是没有完全解决

1.  用数据库或其他方式实现一个全局变量,以此保证只生成一个msn线程,但django重启时怎么重置这个变量?

2.  msn成为一个独立程序(和你说的一个意思),但与wsgi的多个守护进程相通讯很容易出现冲突。  

2009/12/14 yuting cui <yuti...@gmail.com>

Russell

unread,
Dec 14, 2009, 8:04:02 AM12/14/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
还是独立一个的好, 可以单独杀了重启. 做成stateless的, 开一个unix socket或者udp socket, 用一个轻量的协
议, 甚至直接是json或者pb. 冲突不至于把, 需要高并发吗? 用stackless做个队列把. 都是现成的, 写不了几行code.

从django的daemon衍生出来不靠谱, django要是当了, 你还得重新登陆msn不成? 而且也不scale呀...

On Dec 14, 8:13 pm, Yaou <yaou...@gmail.com> wrote:
> 没错,我是刚刚明白是wsgi的多个守护进程造成的,但想了半天有两个思路但还是没有完全解决
>
> 1. 用数据库或其他方式实现一个全局变量,以此保证只生成一个msn线程,但django重启时怎么重置这个变量?
>
> 2. msn成为一个独立程序(和你说的一个意思),但与wsgi的多个守护进程相通讯很容易出现冲突。
>

> 2009/12/14 yuting cui <yuting...@gmail.com>
>
>
>
> > 2009/12/14 Yaou <yaou...@gmail.com>:


> > > 仔细看了这篇文章,确实让我搞明白了对于开发环境中,出现两个msn线程的原因
> > > 可对于apache+mod_wsgi+django环境下,出现多个msn线程的这个原因还是没找到
>
> > > anyway,多谢,刚刚的文章对我还是有很大的帮助 :)
>
> > 应该是你的wsgi跑了多个守护进程造成,设置发上来看看?
> > 不过对你说的这种情况,最好还是把msn的写成守护进程,到时候让django进程去连就好了
> > --
> > -----BEGIN GEEK CODE BLOCK-----
> > Version: 3.12
> > G! d- s:->: a- C++(++++)$
> > UL++++ P L++(++++) E(++)
> > W+(+++) N+ o? K? w++(+++)
> > !O !M V? PS PE Y+ PGP !t
> > !5 !X R !tv b++ DI+ D+
> > G e* h+ r* y?
> > ------END GEEK CODE BLOCK------
>
> > --
> > 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:pyth...@googlegroups.com

> > 退订:http://tinyurl.com/45a9tb//针对163/qq邮箱:http://tinyurl.com/4dg6hc

Yaou

unread,
Dec 14, 2009, 8:16:50 AM12/14/09
to pyth...@googlegroups.com
恩,当初就是为了省事儿,这个项目是自己做着玩儿的,把msn放在django里面

现在看来是需要把msn拿出来了,刚刚说的冲突,是考虑如果用socket通信,django连向msn进程的守护线程也
会类似之前msn线程一样出来好几个,想想可以在msn进程端处理这个问题,剩下的就没啥问题了

谢谢以上各位,算是找到一个最佳的办法了   呵呵

2009/12/14 Russell <yuf...@gmail.com>
Reply all
Reply to author
Forward
0 new messages