apache+mod_wsgi部署quixote的方法

折腾了好几天,终于搞定,特此记录,如有大牛发现方法有所不妥,请指正一下,不胜感激涕零........
  过程如下:
  假设python2.5和quixote你已经安装了
  1.安装apache2.2 ,过程略
  2.下载mod_wsgi.so
  3.copy到apache的modlues目录下
  4.给quixote准备连接mod_wsgi的脚本,代码如下:

  由于qwip需要支持多线程的publisher,所以需要继承publisher实现多线程支持,实现的例子在quixote的demo文件夹中有,代码:

 

multi thread support
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1#multi thread support
 2import thread
 3class ThreadedPublisher (Publisher):
 4    is_thread_safe =  True
 5    def __init__ (self, root_namespace, config=None):
 6        Publisher.__init__(self, root_namespace, config)
 7        self._request_dict = {}
 8    def _set_request(self, request):
 9        self._request_dict[thread.get_ident()] = request
10    def _clear_request(self):
11        try:
12            del self._request_dict[thread.get_ident()]
13        except KeyError:
14            pass
15    def get_request(self):
16        return self._request_dict.get(thread.get_ident())

  
  注意 is_thread_safe = True 这一行是例子中没有的,但是必须加,不然qwip会认为你的publisher不是线程安全的,哪怕你已经做了多线程的处理。
  
  有了这个类之后就简单了,只需要:

Create application
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1def create_publisher():
 2    #return Publisher(RootDirectory(),
 3    #                 display_exceptions='plain')
 4    return ThreadedPublisher(RootDirectory())
 5
 6import traceback
 7from quixote import get_wsgi_app
 8
 9try:
10    pub = create_publisher()
11    application = get_wsgi_app()
12except TypeError,e:
13    pass
  
  注意application = get_wsgi_app()这个对象名称必须是application,不然mod_wsgi找不到能调用的东西。
  
  5.有了连接的脚本后就只需要配置mod_wsgi就行了
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 WSGIScriptAlias /test D:/WorkPlace/alex/TestQuixote/wsgi.py
2 < Directory  D:/WorkPlace/alex/TestQuixote />
3    WSGIApplicationGroup %{GLOBAL}
4    Order deny,allow
5    Allow from all
6 </ Directory >

  我这里配置了一个目录,其余的可以举一反三

你可能感兴趣的:(apache,多线程,thread,脚本)