免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1997 | 回复: 0

quixote使用scgi ,处理session 及 线程 的学习 [复制链接]

论坛徽章:
0
发表于 2011-05-10 14:05 |显示全部楼层
最近一直在学习quixote .

根据白皮书的推荐, 使用 scgi 方式和 apache进行 请求和回应的传递.

然后,看到 文档中有 multithread,, 就依样生成了一个 继承 Publiser似乎支持多线程的 ThreadPublisher.

然后,又 google 得知: 按文档那样搞还不行,需要加一个类的变量: is_thread_safe = True. 才能真正支持的多线程请求。

既然 有is_thread_safe 才能支持多线程, quixote.server.scgi_server 中应该有对该类变量的判断,结果,学习了一下scgi_server.py 发现:没有!!!

继续深入: 学习scgi-1.14的源代码,在scgi_server.py 中也没发现对该类变量的引用,, 而且在学习scgi-1.14的源代码过程中有了新的困惑...

scgi ,是以进程的方式工作,请求到来时,scgi,的父进程,会根据情况,fork出子进程对请求进行处理,默认最多fork出5个,超过5个并发的请求就排队等待,这样,每个子进程都会生成一个quixote_handler的实例,每个quixote_handler的实例,又会生成一个 publisher 的实例,意味着: 五个进程里,有5个publisher,就有5个sessionmanager...scgi-1.14源代码的注释中写道:”尽量用同一个子进程程,处理来自一个地方的请求“,也就是说,不保证,该IP的请求,不被分配到其他子进程去.. 而publisher.py中又明确的说明: "singleton的publisher是针对进程的!"

若一个请求在子进程1 中,存了一个session, 下次请求,被分配到子进程2中,子进程2的sessionmanager 的 dict中并没有该session存在,对该用户而言就是session的丢失,,

是不是可以理解为: scgi方式下,不可把session放到默认的dict中,必须把session 持久化起来? 这是一个困惑..

另外,既然 scgi 以进程方式运作,,且scgi_server的源代码中,没有对线程生成的处理,是否,quixote 的文档中的 multithread 对 scgi无效? 这是困惑二。

那末multithread在什么时候起作用呢? 继续学习 publisher的代码,及 quixote.wsgi的代码,发现,以wsgi方式和apache链接,,才是多线程的方式,文档的multithread才起作用。。。

不知这个理解对不对?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP