[python]逆水行舟不进则退(1)
工作后迎来的第一个长假期,打算在家休息一下,看看书之类的。但是不写点东西,不做点东西,感觉有些浪费时间。同时也想通过做点东西检验下自己这段时间的收获。其实在我开始写这篇文章的时候心里还是很没底的~交代完背景。开始撸!(干货在最后总结部分)
1.做点什么?
这个时候脑子里就回想起一个问题(原来每次师父,一神问我这个问题的时候,我都一脸茫然。):
用户在浏览器输入网址之后,到看到网站内容的过程中,都发生了什么?
我不知道你们看到这个问题的时候,得到的答案是什么。但是这个问题包含的知识点,很多。说简单也可以,往深了讲也可以说的很深因为牵扯到网站的架构方面。我的意思是:这个问题用来检验我的学习成果是一个十分好的命题。
ok,问题有了。下面开始一步步的分析下这个问题:
问题拆解之后主要是这几个方面:a.缓存
b.dns
c.http协议
d.服务器
服务器原来对我来说是一个黑盒子,现在我要证明我是否真的懂了。那么最好的办法就是自己做一个黑盒子!目标就是:从0搭建一个网站,结构nginx+flask(待定)+uwsgi+mysql。重点是这个网站是干嘛的!我不想写一个博客。。。因为如果要是写一个博客,我肯定写完就再也不去碰它了。没有优化下去的欲望。那么待定吧!(有好的建议也可以留言讨论)
十一结束的时候上线我的网站!
2.准备工作
服务器环境总概览:1:Nginx 1.4.42:python 2.7.10(包括下列python库/工具)2.1:Pip2.2:Virtualenv2.3:uWSGI 2.0.10(应用服务器)2.4: Bottle 0.12.5(web框架)2.5: Cheetah 2.4.4(模版框架)安装过程如遇到问题请参考:http://www.cnblogs.com/xiongpq/p/3381069.html
如果说程序员门槛高,或者拒人千里之外的一点就是布置环境(剃牦牛!)。这个过程简直了!牢骚发完,“吹过的nb哭着也要实现!”——我们公司创始人的名言
a.服务器:阿里云免费十五天(http://free.aliyun.com/)——后面是我的推荐码为EG8RBO,貌似你们要花钱我才有钱。本着研究的精神看看这个是什么鬼
我选的是centos,不懂得话就跟我选一样,下面配置服务的时候方便
链接你的服务器教程:https://docs.aliyun.com/
实例公网ip:云服务器ECS——实例——在实例列表找到你当时选的地区——就看到了公网ip了
密码:点击更多——重置密码——重置完密码,更多里面重启下——等待重启完就可以通过ssh链接你的服务器了
现在服务器上什么都没有,我们需要搭建开发环境
b.搭建环境
1.把自带的是python2.6.6我们升级成2.7.10:
先要安装依赖的库!
yum -y install gcc automake autoconf libtool make gcc-c++ patch byacc bison wget unzip
yum -y install boost-devel db4-devel openssl-devel readline-devel gdbm-devel pcre-devel nc xmlto libevent-devel
yum -y install jasper-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel unixODBC-devel
yum -y install subversion git-core vim libxslt-devel libxml2-devel
yum -y install sqlite-devel
之后参考教程安装:http://blog.csdn.net/my2010sam/article/details/12156821(把里面所有的2.7.3改成2.7.10)就ok啦
编译安装时注意: ./configure --prefix=/usr/local/python27 -with-zlib=/usr/include
解决系统 Python 软链接指向 Python2.7 版本后,因为yum是不兼容 Python 2.7的,所以yum不能正常工作,我们需要指定 yum 的Python版本
#vi /usr/bin/yum
将文件头部的
#!/usr/bin/python
改成
#!/usr/bin/python_old
2.安装pip
在远程机(阿里云服务器)输入:
wget https://bootstrap.pypa.io/ez_setup.py -O - | python (安装setuptools)
然后按照:http://www.ttlsa.com/python/how-to-install-and-use-pip-ttlsa/ (安装pip)
最后:ln -s /usr/local/python27/bin/pip /usr/bin/pip (建立软链接,就是快捷方式,你可以在任何地方输入‘pip’)
安装virtualenv
建立virtualenv环境:/usr/local/python27/bin/virtualenv pywork
激活成功:(下面的操作都需要在虚拟环境中进行操作)如下图我的叫虚拟环境叫:xueweihan
安装需要的web框架和模版框架:
pip install Bottle==0.12.5
pip install Cheetah==2.4.4
到目为止,python的环境搭配好了,下面需要安装nginx(web服务器)
3.安装nginx
1.下载nginx:wget http://nginx.org/download/nginx-1.4.7.tar.gz(我用的是1.4.7版本)
2.安装教程:http://www.cnblogs.com/lixiuran/p/3545669.html(注意安装前提)
3.启动脚本问题:http://www.01happy.com/centos-nginx-shell-chkconfig/
4.安装uWSGI(应用服务器,解决python多线程效率底的问题)
pip install uWsgi==2.0.10
安装完成之后,看一下到现在为止都安装了什么东西:pip freeze
环境已经搭建好了。下面配置一些文件。
c.配置服务器
请参考教程: http://www.cnblogs.com/xiongpq/p/3381069.html
这里我把我的nignx和uwsgi的配置贴出来。如果自己看完上面的教程还是有问题的话,可以留言。我会尽快答复,帮你解决。前提是请仔细看上面的教程。
需要注意的部分:uwsgi_pass的地址要和uwsgi监听的地址和端口一样 nginx主要配置部分:
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:;
} uwsgi配置如下
[uwsgi]
socket = 127.0.0.1: #socke和uwsgi_pass一样
chdir = /root/pywork/ #这里是文件所在目录
wsgi-file =test.py # 这里是文件名
processes =
enable-threads=true
socket-timeout=
daemonize=/data/log/uwsgi.log #日志所在位置,方便以后查看日志
pidfile = /var/run/uwsgi.pid #存放的是进程的id
需要写一个demo,用于测试环境搭配成功!
test.py文件内容如下
coding:utf-8
from bottle import Bottle, route, run, default_app @route('/')
def index():
return 'hello world xueweihan!' if __name__=='__main__': run(host='localhost', port=8080)
else:
application = default_app() # 注意这里
准备工作完成!
测试一下,在浏览器输入公网ip:
总结:这个过程遇到问题最多的还是启动脚本的问题。在这里我没有安装mysql的过程,现在不装也可以,网上的教程很多。我就不重复再写了。我这篇文章有些地方不是很详细,只是贴出了教程的链接。如果在认真看完教程之后有任何问题(确定认真看了教程),都可以留言,我看到会第一时间回复大家。我知道配置环境是一个十分痛苦的过程,所以我会尽我最大的努力解决大家的问题。然后,我也希望你是认真的看完提出的问题。
到目前为止,我的服务器搭建完成了。Nginx+uWSGI 这两个都是服务器,一个是web服务器,一个是应用服务器。
Nginx主要用途是监听80(http协议默认端口),然后有请求就调用uWSGI服务器。这里用到的是uwsgi协议(注意大小写,全小写诗协议名字,uWSGI是服务器名字,诡异吧)。然后通过uWSGI服务器来启动application,应用。
当然Nginx服务器也可以直接调用应用,但是为什么要用uWSGI服务器来启动应用呢?这里,如果的uwsgi.ini 文件中配置多个进程的话。然后通过ps命令查看进程。你就会发现:有很多个uwsgi进程。这是因为,uWSGI是master——worker 并发模型的服务器,用来解决并发问题。主要原因是python这个语言,他的多线程中有个大家耳熟能详的缩写GIL这个东西限制了python多线程的效率,也就是为什么python的多线程回比单线程还慢!所以uWSGI就是分别建立好多个相对独立的环境,多个uwsgi进程(这里表达的有些不好,希望大家可以给一个更好的说法),然后通过这个方式,解决并发的问题!
总而言之,Nginx是用来解决负载均衡,uWSGI用来解决并发问题。当然现在我们不需要考虑这么多,只是了解一下。
好了回到最开始的问题:
用户在浏览器输入网址之后,到看到网站内容的过程中,都发生了什么?
你就会发现原来说的,可以回答的很简单。也可以说的很深,所以这个问题,面试的时候很多人会问。。。看你的知识面
我在今天做这些东西的时候,我就想起我原来看过的一个系列的文章。我打算跟做写一写,或许会对服务器更加的理解。
一起写个web服务器:http://web.jobbole.com/82360/
哎呦不错哦!
还想到原来很多好玩的东西,但是一直没时间实验,动手一写一写。那么我先把建设网站的事情放下来。去玩点有意思的,或许会在这个过程中发现些好的点子。写出一个有意思的网站。(其实还是对自己一个人写一个网站心里没底。。。。还需要多学习!)
----以上内容,如有欠妥的地方,告诉我,我会虚心接受(改不改再考虑。。。)
老样子留下我的个人微信:xueweihan(我是男的!)喜欢python的朋友可以加我,我们一起交流。
[python]逆水行舟不进则退(1)的更多相关文章
- 虚言妙诀终虚见,面试躬行是致知,Python技术面试策略与技巧实战记录
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_183 2021年,对于正在找工作的朋友来说,笼罩在新冠肺炎疫情之下,今年的就业季显得更加具有挑战性,更有意思的是,每当这个时候,各 ...
- 如何优雅的进入IT世界
原始地址:http://www.cocoachina.com/gamedev/misc/2014/0613/8808.html 以下三段是废话,请跳过. (废话段1)有文科生想了解IT世界.这并不 ...
- 没有15k薪资都不会了解的测试内幕
软件测试的工程师阶层是指随着行业的飞速发展,测试人员犹如身在洪流之中“逆水行舟不进则退”.知其然已经无法满足当今的测试人员,还要知其所以然.所以测试人员不仅仅要关注系统外部结构,还得了解系统内部的逻辑 ...
- [shell编程]一个简单的脚本
首先,为什么要学习shell呢?哈哈,当然不是shell能够怎样怎样然后100字. 最近看到一篇博文<开阔自己的视野,勇敢的接触新知识>,读完反思良久.常常感慨自己所会不多,对新知识又有畏 ...
- 9年经验,总结SEO职业瓶颈
昨天与某集团的副总与部门总监沟通了一些关于SEO发展与瓶颈的问题,有很多感触,今天整理出来分享给大家.其实关于SEO瓶颈这个话题已经不是一年两年了,很多新人老人越来越困惑,9年历程一路风雨走来,希望能 ...
- n年前,我没钱但年轻,我怕n年后我老时,还是一无所成——2017我的收获和反思
记得当年我刚从学校里出来时,应该和现在的95后差不多,当时还是很惶恐的,怕找不到工作,怕无法挣到足够的钱买房子支撑家庭,(当然还有其它的担心点),却唯独没意识到自己拥有着最宝贵的财富:年轻. 年轻意味 ...
- iOS组件化之路(一)
写在最前 从开始学写代码,胡乱的看书,不懂如何写第一个程序,到开始写出第一个程序,这段道路有些漫长.慢慢开始自己独立的去分析给出的需求,到如何实现,最初的想法只是仅仅实现,到后来懂得如何利用自己技术和 ...
- [转帖]Edge投降Chromium!微软王牌浏览器是如何跪倒的
Edge投降Chromium!微软王牌浏览器是如何跪倒的 https://tech.sina.com.cn/n/k/2018-12-17/doc-ihmutuec9824604.shtml 谷 ...
- tomcat原理解析(一):一个简单的实现
tomcat原理解析(一):一个简单的实现 https://blog.csdn.net/qiangcai/article/details/60583330 2017年03月07日 09:54:27 逆 ...
随机推荐
- 那些在学习iOS开发前就应该知道的事(part 1)
英文原文:Things I wish I had known before starting iOS development—Part 1 http://www.cocoachina.com/ios/ ...
- Docker实践(1)—入门
tutorial centos6.5环境. # yum install docker-io -y 会依赖安装libcgroup,lxc,lxc-libs 启动docker # service dock ...
- PS脚本获取网络适配器状态
1. Get-WmiObject -Class Win32_NetworkAdapterConfiguration ` -filter "IPEnabled = $true" 2. ...
- 搞了个基于zookeeper的Leader/Follower切换Demo
基于zookeeper写了个Leader选举类库demo,场景如下: 上图中的Program1..4可以部署在1台server上,也可以部署在多台server上,也可以是一个进程中的多个线程. 运行效 ...
- 如何利用OCS缓存TomcatSession全局变量(转)
转: 首先非常感谢阿里云给我们提供了一个如此省事的平台. 我们公司是一家物流公司,主要提供运输和仓储的服务.我们现在正在把我们的系统往阿里云迁移.当然,还在迁移过程中,所以还有很多是没办法现在说得太清 ...
- jackson 实体转json 为NULL或者为空不参加序列化
1.实体上 @JsonInclude(Include.NON_NULL) //将该标记放在属性上,如果该属性为NULL则不参与序列化 //如果放在类上边,那对这个类的全部属性起作用 //Include ...
- Android酷炫实用的开源框架——UI框架(转)
转载别人整理好的文章,列出了很多炫酷的UI开源设计 原文地址:http://www.androidchina.net/1992.html 1.Side-Menu.Android分类侧滑菜单,Yalan ...
- Scala 深入浅出实战经典 第52讲:Scala中路径依赖代码实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Codeforces Round #379 (Div. 2) E. Anton and Tree 缩点 直径
E. Anton and Tree 题目连接: http://codeforces.com/contest/734/problem/E Description Anton is growing a t ...
- ATT 解锁手机
最近豪们都在忙着买买买950 本土鳖左瞅瞅右看看实在钱包不够豪 正好看到美帝640打折39刀 (http://www.microsoftstore.com/store/msusa/en_US/pdp/ ...