初步带动Django

4 views
Skip to first unread message

HoLin

unread,
Mar 29, 2009, 11:12:23 PM3/29/09
to eurasia-users
按这个guide

2.5.1 启动 django

首先我们通过 django-admin.py startproject SITE 命令创建一个站点。

我们可以编写如下服务器启动脚本。

#!/usr/bin/python2.5
#-*- coding: utf-8 -*-
# django 服务器启动脚本

import sys, os
sys.path.insert(0, '/PATH/TO/DJANGO/PROJECTS')
os.environ['DJANGO_SETTINGS_MODULE'] = 'SITE.settings'

from eurasia import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
server = WSGIServer(wsgiHandler(), port=8080)
server.run()

开始操作:

/Users/holin/tmp/mysite #我用Django命令行生成的项目目录,Django版本1.02

/Users/holin/tmp/mysite/rub.py #我建的run.py文件


#!/usr/bin/python2.5
#-*- coding: utf-8 -*-
# django 服务器启动脚本

import sys, os
sys.path.insert(0, '/Users/holin/tmp/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from eurasia import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
server = WSGIServer(wsgiHandler(), port=8080)
server.run()

报错:
HoLin:mysite holin$ python run.py
Traceback (most recent call last):
File "run.py", line 11, in <module>
server = WSGIServer(wsgiHandler(), port=8080)
NameError: name 'wsgiHandler' is not defined



改run.py

#!/usr/bin/python2.5
#-*- coding: utf-8 -*-
# django 服务器启动脚本

import sys, os
sys.path.insert(0, '/Users/holin/tmp/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from eurasia import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
server = WSGIServer(WSGIHandler(), port=8080)
server.run()

报错:
HoLin:mysite holin$ python run.py
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/site-packages/eurasia-3.0.0a6-py2.5.egg/eurasia/cgietc.py",
line 293, in controller
for line in application(environ, start_response):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/site-packages/django/core/handlers/wsgi.py", line 228, in
__call__
self.load_middleware()
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/site-packages/django/core/handlers/base.py", line 31, in
load_middleware
for middleware_path in settings.MIDDLEWARE_CLASSES:
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/site-packages/django/conf/__init__.py", line 28, in
__getattr__
self._import_settings()
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/site-packages/django/conf/__init__.py", line 59, in
_import_settings
self._target = Settings(settings_module)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/site-packages/django/conf/__init__.py", line 94, in __init__
raise ImportError, "Could not import settings '%s' (Is it on
sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE,
e)
ImportError: Could not import settings 'mysite.settings' (Is it on
sys.path? Does it have syntax errors?): No module named
mysite.settings



继续改,os.environ['DJANGO_SETTINGS_MODULE'] = 'settings':

#!/usr/bin/python2.5
#-*- coding: utf-8 -*-
# django 服务器启动脚本

import sys, os
sys.path.insert(0, '/Users/holin/tmp/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

from eurasia import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
server = WSGIServer(WSGIHandler(), port=8080)
server.run()

启动了Django项目,但是:
Exception Value:

No module named mysite.urls

改settings.py,
ROOT_URLCONF = 'mysite.urls' => ROOT_URLCONF = 'urls'

重启,刷新,看到默认页面。


总结,模块载入路径问题没有完全理顺,可能不同软件版本导致的。我现在只是最原始的Django项目,不知道加入Model,View之类的之后会有什
么问题。











沈崴

unread,
Mar 29, 2009, 11:41:22 PM3/29/09
to eurasia-users
感谢反馈。文档上关于 django 这部份我会作出相应调整。

需要注意的是因为 eurasia 线程是 stackless tasklet 微线程,
线程中不能使用常规的 IO 操作 (会卡住其他线程影响性能),
数据库是典型产生 IO 的应用, 这个在邮件列表中前面的帖子
有过讨论和解决方法。根据那个帖子, eurasia.shelve2.Pool
已经封装了线程池, 用法是:

eurasia.shelve2 import Pool
nonblock = Pool()
@nonblock
def foo():
... IO 操作

但是如果使用 apache + mod_fcgid 来架设 eurasia
就不用关心这个问题, 这是 eurasia 为尚不熟悉 stackless
的用户提供的一个解决办法。

当然数据库部分, 推荐使用 eurasia 为微线程量身订做的
shelve2 对象数据库。具体请参考文档。

除了 shelve2 之外, 张沈鹏曾对常规关系数据库的 stackless 化
作过尝试。eurasia 项目欢迎用户提交这方面的解决方案,
在接下来的这段时间里, eurasia 会给出无缝支持此类数据库的方案,
使 django 这类框架的 IO 接口可以平滑地在 stackless 中使用。

对 stackless python 爱好者而言, 这是一个好消息,
因为通过 eurasia 我们得到了梦寐以求的 stackless django,
我们现在可以在 django 中使用 stackless 特性了!

再次感谢你提交的反馈! 欢迎继续适用并提交 bug,
以帮助 eurasia 更好地兼容 django。

另外我对 django 架设在 eurasia 上的性能比较感兴趣,
HoLin 有空的时候不妨做一下对比测试?

On Mar 30, 11:12 am, HoLin <holin...@gmail.com> wrote:
> 按这个guide
>
> 2.5.1 启动 django
>
> 首先我们通过 django-admin.py startproject SITE 命令创建一个站点。
>
> 我们可以编写如下服务器启动脚本。
>
> #!/usr/bin/python2.5
> #-*- coding: utf-8 -*-
> # django 服务器启动脚本
>
> import sys, os
> sys.path.insert(0, '/PATH/TO/DJANGO/PROJECTS')
> os.environ['DJANGO_SETTINGS_MODULE'] = 'SITE.settings'

看上去我应该改成这样:
sys.path.insert(0, '/PATH/TO/DJANGO/PROJECTS/SITE')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

> from eurasia import WSGIServer
> from django.core.handlers.wsgi import WSGIHandler

> server = WSGIServer(wsgiHandler(), port=8080)

wsgiHandler -> WSGIHandler
这里又是一个大小写问题 :)

HoLin

unread,
Mar 29, 2009, 11:56:05 PM3/29/09
to eurasi...@googlegroups.com


2009/3/30 沈崴 <wile...@gmail.com>

现在主要在做Rails项目。对django也不熟悉,不知道怎么测数据才真实。
 


On Mar 30, 11:12 am, HoLin <holin...@gmail.com> wrote:
> 按这个guide
>
> 2.5.1 启动 django
>
> 首先我们通过 django-admin.py startproject SITE 命令创建一个站点。
>
> 我们可以编写如下服务器启动脚本。
>
> #!/usr/bin/python2.5
> #-*- coding: utf-8 -*-
> # django 服务器启动脚本
>
> import sys, os
> sys.path.insert(0, '/PATH/TO/DJANGO/PROJECTS')
> os.environ['DJANGO_SETTINGS_MODULE'] = 'SITE.settings'

看上去我应该改成这样:
sys.path.insert(0, '/PATH/TO/DJANGO/PROJECTS/SITE')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

这里是我的问题,我没看清楚,原来文档是应该是对的。

没看清楚,导致做了不少无用功。建议强调一下
sys.path.insert(0, '/PATH/TO/DJANGO/PROJECTS')  是项目所在目录

 



--
Regards
HoLin

张沈鹏

unread,
Mar 30, 2009, 12:05:27 AM3/30/09
to eurasi...@googlegroups.com
2009/3/30 沈崴 <wile...@gmail.com>:

> 感谢反馈。文档上关于 django 这部份我会作出相应调整。
>
> 需要注意的是因为 eurasia 线程是 stackless tasklet 微线程,
> 线程中不能使用常规的  IO 操作 (会卡住其他线程影响性能),
> 数据库是典型产生 IO 的应用, 这个在邮件列表中前面的帖子
> 有过讨论和解决方法。根据那个帖子, eurasia.shelve2.Pool
> 已经封装了线程池, 用法是:
>
> eurasia.shelve2 import Pool
> nonblock = Pool()
> @nonblock
> def foo():
>    ... IO 操作
>
> 但是如果使用 apache + mod_fcgid 来架设 eurasia
> 就不用关心这个问题, 这是 eurasia 为尚不熟悉 stackless
> 的用户提供的一个解决办法。
>
> 当然数据库部分, 推荐使用 eurasia 为微线程量身订做的
> shelve2 对象数据库。具体请参考文档。
>
> 除了 shelve2 之外, 张沈鹏曾对常规关系数据库的  stackless 化
> 作过尝试。eurasia 项目欢迎用户提交这方面的解决方案,

我失败了....
和dbutils配合使用好像有问题
我有空在来试试
.....
现在支持wsgi了
移植起来很容易

--
张沈鹏
http://zsp.javaeye.com/
Mobile: 13693622296

沈崴

unread,
Mar 30, 2009, 12:16:47 AM3/30/09
to eurasia-users
On Mar 30, 12:05 pm, 张沈鹏 <zsp...@gmail.com> wrote:
> 2009/3/30 沈崴 <wilei...@gmail.com>:

> > 感谢反馈。文档上关于 django 这部份我会作出相应调整。
>
> > 需要注意的是因为 eurasia 线程是 stackless tasklet 微线程,
> > 线程中不能使用常规的 IO 操作 (会卡住其他线程影响性能),
> > 数据库是典型产生 IO 的应用, 这个在邮件列表中前面的帖子
> > 有过讨论和解决方法。根据那个帖子, eurasia.shelve2.Pool
> > 已经封装了线程池, 用法是:
>
> > eurasia.shelve2 import Pool
> > nonblock = Pool()
> > @nonblock
> > def foo():
> > ... IO 操作
>
> > 但是如果使用 apache + mod_fcgid 来架设 eurasia
> > 就不用关心这个问题, 这是 eurasia 为尚不熟悉 stackless
> > 的用户提供的一个解决办法。
>
> > 当然数据库部分, 推荐使用 eurasia 为微线程量身订做的
> > shelve2 对象数据库。具体请参考文档。
>
> > 除了 shelve2 之外, 张沈鹏曾对常规关系数据库的 stackless 化
> > 作过尝试。eurasia 项目欢迎用户提交这方面的解决方案,
>
> 我失败了....
> 和dbutils配合使用好像有问题
> 我有空在来试试

django 我不是很熟, 兼容性问题, 就全仰仗大家提交啦 ;)

老光

unread,
Apr 10, 2009, 3:57:27 AM4/10/09
to eurasi...@googlegroups.com
我对这个TODO非常感兴趣.
这儿的关系数据库应该包含sqlite吧?我比较喜欢他.
对@noblock的用法,我一直没有搞懂意思,金典上也没有说过,也没有办法根据关键字在网上搜索,谁能简单讲解一下这种用法?
比如上例中的foo,他可以是一个类里面的一个函数不?

老光

unread,
Apr 10, 2009, 5:20:56 AM4/10/09
to eurasi...@googlegroups.com
好象是因为gdbm模块的问题,linux下有这个模块,windows下没有.google了下,没有找解决办法...
我想试一下,直接用Pool来将eurasia启动为多进程的,象上面那个用来启动Django的例子一样,不知是否可行?
threading = Pool(32)
@threading
def hanlder(httpfile):
...
是否简单地这样就可以了?
测试的话,准备在里面增加一个time.sleep语句,看会否被完全阻塞.

沈崴

unread,
Apr 10, 2009, 5:22:24 AM4/10/09
to eurasia-users
On Apr 10, 3:57 pm, 老光 <yaoguangm...@cq.chinatelecom.com.cn> wrote:
> 我对这个TODO非常感兴趣.
> 这儿的关系数据库应该包含sqlite吧?我比较喜欢他.
> 对@noblock的用法,我一直没有搞懂意思,金典上也没有说过,也没有办法根据关键字在网上搜索,谁能简单讲解一下这种用法?
> 比如上例中的foo,他可以是一个类里面的一个函数不?

见这个帖子:
http://groups.google.com/group/eurasia-users/browse_thread/thread/da189b6c9b9bf81

老光

unread,
Apr 10, 2009, 5:37:48 AM4/10/09
to eurasi...@googlegroups.com
我正是找了那个贴子才来问这个问题的.
模糊记得在哪儿看到过@的意思,是不是这样:
@threading
def handler(httpfile):
...
======等价于=======
def handler(httpfile):
...
threading(handler)
是不是这样啊?

----- Original Message -----
From: "沈崴" <wile...@gmail.com>
To: "eurasia-users" <eurasi...@googlegroups.com>
Sent: Friday, April 10, 2009 5:22 PM
Subject: [eurasia-users] Re: 初步带动Django--TODO:无缝支持关系数据库


沈崴

unread,
Apr 10, 2009, 8:52:38 AM4/10/09
to eurasia-users
On Apr 10, 5:37 pm, 老光 <yaoguangm...@cq.chinatelecom.com.cn> wrote:
> 我正是找了那个贴子才来问这个问题的.
> 模糊记得在哪儿看到过@的意思,是不是这样:
> @threading
> def handler(httpfile):
> ...
> ======等价于=======
> def handler(httpfile):
> ...
> threading(handler)
> 是不是这样啊?

这个你可以查一下文档 :)

老光

unread,
Apr 12, 2009, 9:46:43 PM4/12/09
to eurasi...@googlegroups.com
终于google到一个'python @修饰符',只有一条记录,意思是我说的那个意思,也许上次也是看的这一条...

对于这个Pool,目前看来只支持linux(要依赖gdbm).不知沈老大是否有兴趣看一下K3的Threading.Thread方式,他可以在不阻塞其他用户请求下,继续响应新用户,包括在面临time.sleep,或者IO操作的情况下.
Threading是哪个中文对应的概念?线程,还是进程?(进程好象是processing模块?)K3这个对linux和windows下的python都支持的.

----- Original Message -----
From: "沈崴" <wile...@gmail.com>
To: "eurasia-users" <eurasi...@googlegroups.com>
Sent: Friday, April 10, 2009 8:52 PM
Subject: [eurasia-users] Re: 初步带动Django--TODO:无缝支持关系数据库


老光

unread,
Apr 12, 2009, 10:03:10 PM4/12/09
to eurasi...@googlegroups.com
好消息!
我在windows下,把from gdbm import open as dbm改为了:
dbm = open
然后用:
from eurasia.shelve2 import Pool
threading = Pool(32)
@threading
def handler(httpfile):
...
现在,一个链接的time.sleep不阻断其他请求了!不知这是不是进步?

----- Original Message -----
From: "老光" <yaogua...@cq.chinatelecom.com.cn>
To: <eurasi...@googlegroups.com>

沈崴

unread,
Apr 12, 2009, 10:19:12 PM4/12/09
to eurasia-users
On Apr 13, 10:03 am, 老光 <yaoguangm...@cq.chinatelecom.com.cn> wrote:
> 好消息!
> 我在windows下,把from gdbm import open as dbm改为了:

也可以参考这个帖子, 直接使用里面 Pool 的代码:
http://groups.google.com/group/eurasia-users/browse_thread/thread/0da189b6c9b9bf81

> dbm = open
> 然后用:
> from eurasia.shelve2 import Pool
> threading = Pool(32)
> @threading
> def handler(httpfile):
> ...
> 现在,一个链接的time.sleep不阻断其他请求了!不知这是不是进步?

这是对基于线程的应用的兼容方法。
euraisa 的工作模式, 你可以参考下 python 标准库的 asyncore 模块 。

老光

unread,
Apr 12, 2009, 10:24:56 PM4/12/09
to eurasi...@googlegroups.com
刚才试了一下,下载一个大文件的时候,也不会阻塞.
线程,不是windows才有的吧?我这样写应该将来可以很方便地移值到linux吧?

----- Original Message -----
From: "沈崴" <wile...@gmail.com>
To: "eurasia-users" <eurasi...@googlegroups.com>
Sent: Monday, April 13, 2009 10:19 AM
Subject: [eurasia-users] Re: 初步带动Django--TODO:无缝支持关系数据库


老光

unread,
Apr 12, 2009, 10:26:26 PM4/12/09
to eurasi...@googlegroups.com
好象thread跟threading是两个模块?后者更被推荐一些?

----- Original Message -----
From: "沈崴" <wile...@gmail.com>
To: "eurasia-users" <eurasi...@googlegroups.com>
Sent: Monday, April 13, 2009 10:19 AM
Subject: [eurasia-users] Re: 初步带动Django--TODO:无缝支持关系数据库


沈崴

unread,
Apr 12, 2009, 10:30:17 PM4/12/09
to eurasia-users
On Apr 13, 10:24 am, 老光 <yaoguangm...@cq.chinatelecom.com.cn> wrote:
> 刚才试了一下,下载一个大文件的时候,也不会阻塞.
> 线程,不是windows才有的吧?我这样写应该将来可以很方便地移值到linux吧?

是可以的。你可以了解下相关的知识。

Reply all
Reply to author
Forward
0 new messages