odoo源码解析-- <2>--启动类加载(3)
2018-01-11 21:45
211 查看
在上一篇博客中,我大概介绍了odoo客户端的服务启动,本片博客中,我讲介绍服务端的服务启动。位于odoo.service.server
odoo.service.server.start():
![](https://img-blog.csdn.net/20180111213720793?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
load_server_wide_modules() *
这个方法加载了两个模块:web和web_kanban
server
接下来可以看出odoo支持三种服务类型:
·GeventServer
·PreforkServer
·ThreadedServer(默认)
![](https://img-blog.csdn.net/20180111213919095?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
CommonServer是后面三个类的父类
Odoo服务器通过ThreadedServer.run()运行
![](https://img-blog.csdn.net/20180111213949748?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
启动http服务cron(Linux下的定时执行工具,承担计划任务,可以在无需人工干预的情况下运行作业)线程,然后等待信号
Run方法里首先调用了strat()方法
![](https://img-blog.csdn.net/20180111214054420?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
start()
![](https://img-blog.csdn.net/20180111214130546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
当第二个红色框的条件不满足时,会加载下一个if:
![](https://img-blog.csdn.net/20180111214154486?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
因此,在默认参数下,执行http_spawn()
http_spawn()
![](https://img-blog.csdn.net/20180111214242404?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
http_spawn()启动一个名为odoo.service.httpd的线程,并在控制台输出服务信息:
![](https://img-blog.csdn.net/20180111214317055?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
http_thread()
![](https://img-blog.csdn.net/20180111214352088?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
在http_thread线程中,将调用ThreadWSGIServerReloadable
到这里 odoo已经可以启动了
我把ThreadWSGIServerReloable的初始函数注释掉 它能启动
![](https://img-blog.csdn.net/20180111214436459?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
那这个类究竟是干嘛的呢?
Werkzeug是Python的WSGI规范的实现函数库。基于BSD协议。
WSGI(Web Server Gateway Interface)
WSGI服务允许重用环境提供的监听套接字,它通过自动重加载使用,用于保持当有重加载的时候监听套接字是打开状态
![](https://img-blog.csdn.net/20180111214851032?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
####
该类继承了ThreadedWSGIServer,其中app参数:
![](https://img-blog.csdn.net/20180111214915887?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
为start方法中传递的
![](https://img-blog.csdn.net/20180111214922051?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM1NzM3MzAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
原因:
start方法
odoo服务和进程的开始odoo.service.server.start():
load_server_wide_modules() *
这个方法加载了两个模块:web和web_kanban
server
接下来可以看出odoo支持三种服务类型:
·GeventServer
·PreforkServer
·ThreadedServer(默认)
CommonServer是后面三个类的父类
Odoo服务器通过ThreadedServer.run()运行
ThreadedServer(CommandServer)
run()启动http服务cron(Linux下的定时执行工具,承担计划任务,可以在无需人工干预的情况下运行作业)线程,然后等待信号
Run方法里首先调用了strat()方法
start()
当第二个红色框的条件不满足时,会加载下一个if:
因此,在默认参数下,执行http_spawn()
http_spawn()
http_spawn()启动一个名为odoo.service.httpd的线程,并在控制台输出服务信息:
http_thread()
在http_thread线程中,将调用ThreadWSGIServerReloadable
到这里 odoo已经可以启动了
我把ThreadWSGIServerReloable的初始函数注释掉 它能启动
那这个类究竟是干嘛的呢?
ThreadWSGIServerReloadable
看它的说明可知Werkzeug是Python的WSGI规范的实现函数库。基于BSD协议。
WSGI(Web Server Gateway Interface)
WSGI服务允许重用环境提供的监听套接字,它通过自动重加载使用,用于保持当有重加载的时候监听套接字是打开状态
####
该类继承了ThreadedWSGIServer,其中app参数:
为start方法中传递的
原因:
相关文章推荐
- odoo源码解析-- <2>--启动类加载(2)
- odoo源码解析-- <2>--启动类加载(1)
- odoo源码解析-- <2>--启动类加载(4)
- odoo源码解析-- <2>--启动类加载(5)
- <script>标签的加载解析执行
- 解析STM32启动<转载>
- 网众经典故障排错解析<2>
- <script>标签的加载解析执行
- odoo源码解析-- <1>--源码部署
- <2>Android HAL 发展。文件。两种架构。实例解析
- <script>标签的加载解析执行
- JQuery AJAX 加载 HTML代码“<”形式的。怎么解析成"<"形式,并且把"<img>"解析成图片输出到浏览器中。
- web.xml文件加载顺序 一、 1 、启动一个 WEB 项目的时候, WEB 容器会去读取它的配置文件 web.xml ,读取 <listener> 和 <context-param>
- JDBC系列-<驱动加载原理全面解析>-<JDBC层次结构和基本构成>-存储过程 CallableStatement(创建和使用)
- android基于openfire+spark+amack 即时聊天--------<2>登录遇到的问题和重要类解析
- 老调重弹:JDBC系列 之 <驱动加载原理全面解析>
- 老调重弹:JDBC系列 之 <驱动加载原理全面解析>
- 【python爬虫专题】解析方法 <2> Requests库方法总结
- Android Launcher 启动简述 <2>
- JDBC系列 之 <驱动加载原理全面解析>