基于python3.6 Tornado的博客系统,体验地址:blog_taylor
之前了解的开源blog有很多,比如WordPress、LifeType等等,这些都是PHP架构的,我也从事PHP开发,再用PHP写一个blog意义不大.最近几年,python比较火,就想学习一下python相关的知识, 在了解了python相关基础知识后就尝试写个博客。之所以没有选择同步类框架Django,因为想多熟悉python协程,异步,连接池等PHP里面比较缺失的知识,就选择了python的异步IO框架tornado。
首先非常感谢blog_xtg开源分布式博客,其web框架使用的是tornado(一个基于异步IO的python web框架)。tornado相关的开源项目不是很多,搜索过程中就看到了blog_xtg, 由于blog_xtg是基于python2,现在python3是主流,blog_xtg里面有些库在python3没办法使用,blog_taylor是根据blog_xtg重构的。刚开始下载下来,blog_xtg在python3.6环境下有很多问题,后面我就根据它的路由和目录结构进行改造。
- 改用tornado框架,是个基于异步IO的web server。
- 提高多数主要页面访问性能。对频繁查询的组件(例如博客标题、菜单、公告、访问统计)进行缓存,优化sql查询(多条sql语句合并一次执行、仅查需要的字段,例如搜索博文列表不查博文的具体内容)以提高首页博文等主要页面访问性能。
- 访问统计改为日pv和日uv。
- 博文编辑器改为markdown编辑器。
- 引入alembic管理数据库版本。
- 使用数据库连接池,Redis异步缓存连接池,并使用单例模式管理数据库对象,避免出现多个对象情况。
- python3.6.1
- mysql(或者其他sqlalchemy支持的数据库)
- redis
git clone https://github.com/lixiangbest/blog
#项目依赖(如果用的不是mysql可以将MySQL-python替换使用的数据库成所对应的依赖包)
pip3 install -r requirements.txt
python3.6 main.py upgradedb
python3.6 main.py
访问http://[host]:[port]/super/init注册管理员账号。
注:仅没有任何管理员时才可以访问到该页面。
- IO密集型的操作请务必使用异步的client(async/await),否则无法利用到异步的优势
- 由于多数异步IO的框架都是单线程的,所以对于CPU密集型的操作最好交由外部系统处理,防止阻塞,大型项目可以配合消息队列使用更佳
- 如果必须用同步的IO组件,可以配合线程池使用(blog_taylor中使用了sqlalchemy就是配合线程池使用的)
- 如果你是ORM+线程池使用(blog_taylor中就是sqlalchemy+线程池),一般的ORM都有lazy load的机制,在异步框架中请勿使用,因为lazy load的执行在主线程中,很可能会阻塞主线程,影响别的请求。
我用的是Bootstrap Markdown,好像只支持标准的markdown语法,可能大家对代码段的标注语法只知道```的形式,而真正的标准语法是代码段的每一行开头添加4个空格,如果大家不喜欢的话可以尝试更换为marked,参见:修复markdown编辑器无法编写多行code的问题 #2
如果你有任何疑问,可以给我留言
=======