需要注意的是因为 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
这里又是一个大小写问题 :)
看上去我应该改成这样:
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'
我失败了....
和dbutils配合使用好像有问题
我有空在来试试
.....
现在支持wsgi了
移植起来很容易
--
张沈鹏
http://zsp.javaeye.com/
Mobile: 13693622296
django 我不是很熟, 兼容性问题, 就全仰仗大家提交啦 ;)
见这个帖子:
http://groups.google.com/group/eurasia-users/browse_thread/thread/da189b6c9b9bf81
这个你可以查一下文档 :)
也可以参考这个帖子, 直接使用里面 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 模块 。
是可以的。你可以了解下相关的知识。