wsgi+webob+routes学习笔记-初学篇(中)
来源:互联网 发布:孙悟空配音软件 编辑:程序博客网 时间:2024/04/29 04:27
接上文:
可以看到wsgi已经在8090端口上建立了,用Rest client发个消息看下,可以看到已经收到了响应“Hello, World! I am sxmatch”
在以上程序中:方法def myapp(env, start_response)就是用户自己的应用,起入参是wsgi规定好的,env为字典,start_response是个回调函数对象。在application中调用了这个start_response(status,response_headers).
可以说这个简单的server就是wsgi服务的骨架,如果在server和app之间再加入一些管道,就成了middleware,这不就和openstack的消息流处理过程一致了吗?4 使用协程启动的wsgi服务
上文介绍的wsgi服务是直接使用wsgi.server去启动,进一步我们可以利用evenlet中协程去启动一个wsgi服务,在openstack的wsgi.py的Server类中就是使用这种方式。对于协程可以把它大致可以理解成允许子程序可以多次暂停和恢复执行,是实现多任务的一种有效手段。推测openstack中每个application都是通过一个协程来启动的,对于协程还需进一步的学习。基于以上,我们可以将第一段程序进行改造:
__author__= 'sxmatch'
"""useeventlet to start wsgi server"""
importwebob
importeventlet
fromeventlet import wsgi
fromwebob import Request
defmyapp(env, start_response):
status = "200 OK"
response_headers = [('Content-Type','text/plain')]
start_response(status, response_headers)
return ['Hello, World!\r\n']
defstart():
print "start wsgi server"
wsgi.server(eventlet.listen(('192.168.82.191', 8090)), myapp)
wsgi_server= eventlet.spawn(start)
wsgi_server.wait()
其中start函数是要启动的wsgi服务,而evenlet.spawn(start)正是启动一个协程去调用start函数,其返回结果是一个协程对象,这里有个问题需要提一下,如果只执行wsgi_server =eventlet.spawn(start)这句其实并没有真正调用start()方法,只有最后调用该对象的wait()方法后,才能真正执行start函数。Openstack中server类中的wait方法其实就是调用了协程的wait方法。服务启动及响应截图如下:- wsgi+webob+routes学习笔记-初学篇(中)
- wsgi+webob+routes学习笔记-初学篇(上)
- wsgi+webob+routes学习笔记-初学篇(下)
- wsgi+webob+routes学习笔记-初学篇(end)
- WSGI Webob Routes 实例
- WSGI Webob Routes 实例
- WSGI、webob、routes实例
- openstack基础之python WSGI,paste,Routes,webob
- openstack基础之python WSGI,paste,Routes,webob
- webob/routes
- Webob WSGI 装饰器
- Webob WSGI 装饰器
- python学习笔记(WSGI)
- wsgi-restful-routes详解:
- wsgi-restful-routes详解
- openstack 中的Routes + webob 的 REST API
- WSGI 学习笔记
- 【OpenStack】WSGI and Webob+Paste示例
- 如何实现拖动GUI
- HDU 1005 Number Sequence
- 遍历可视化树,查找指定类型元素
- 普通IT和文艺IT工程师的区别
- 进程与线程区别
- wsgi+webob+routes学习笔记-初学篇(中)
- wax
- Oracle中的wmsys.wm_concat
- FTP客户端 Filezilla
- sent event事件总结
- php树型无限级分类结构[预排序遍历树算法]
- 对话框数据交换和检验
- mahout学习过程记录--seq2sparse中文分词
- arcgis clip 裁剪时遇到的问题