python web可以选择django,也可以选择flask,它们的原理差不多。flask比较轻量,下面写一段flask程序来说明python web对并发请求的处理。

app.py

import time

app = Flask()

@app.route('/')
def index():
time.sleep(5) # 单位秒
return render_temple('index.html')

如果使用python app.py命令启动此程序,则相当于单进程启动。两个人访问此web程序必然导致一个人会等待很久。也就是说,python app.py启动的是开发时的服务器,这个服务器是单进程的,这种启动方式只能用于开发时,不能用于部署。

如果部署,推荐使用gunicorn(green unicorn,绿色的独角兽)。使用gunicorn app -w 2 -b :8000命令,-w参数表示worker数,也就是此WEB程序开启的进程数,gunicorn会维护一个进程池来响应用户请求,开几个进程就表示并发量是多少。因为Python线程垃圾,只能使用进程了。

下面举一个更完整的例子来证明开发服务器无法处理并发请求。

from flask import Flask
import time
import requests
import multiprocessing app = Flask("haha") @app.route("/")
def haha():
time.sleep(10)
return "haha" def go():
time.sleep(3) # 等待3秒钟,等服务器启动
print(multiprocessing.current_process().name, "start request", time.time())
resp = requests.get("http://localhost:5000/")
print(resp.text)
print(multiprocessing.current_process().name, "end request", time.time()) if __name__ == '__main__':
multiprocessing.Process(target=go).start()
multiprocessing.Process(target=go).start()
app.run(debug=False) # debug=True会导致程序启动两次

程序输出为

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Process-2 start request 1513270644.646835
Process-1 start request 1513270644.646835
127.0.0.1 - - [15/Dec/2017 00:57:35] "GET / HTTP/1.1" 200 -
haha
Process-2 end request 1513270655.6805644
haha
127.0.0.1 - - [15/Dec/2017 00:57:45] "GET / HTTP/1.1" 200 -
Process-1 end request 1513270665.6937685

显然,两个同时启动的进程,等待回复的时间却不一样,表明服务器只有一个worker在运行。如果把上述python文件中的多进程请求改为多线程请求,也能够看到类似的效果。

使用python app.py命令进行部署,只会造成并发性低,造成加载等待时间长、ajax请求时间长等问题,并不会发生错误。

参考资料

https://segmentfault.com/q/1010000004532745

python web中的并发请求的更多相关文章

  1. Web大规模高并发请求和抢购的解决方案

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  2. 多套方案来提高python web框架的并发处理能力

    Python常见部署方法有 :   fcgi :用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http 服务互动 wsgi :利用http服务的mod_wsgi模 ...

  3. python Web中WSGI uWSGI 以及 uwsgi的区别

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  4. python web开发-flask访问请求数据request

    Request对象在web应用的开发中是一个非常重要的对象,主要用来获取用户发来的请求数据. 常用属性参考:http://docs.jinkan.org/docs/flask/api.html#fla ...

  5. python编程中的并发------多进程multiprocessing

    任务例子:喝水.吃饭动作需要耗时1S 单任务:(耗时20s) for i in range(10): print('a正在喝水') time.sleep(1) print('a正在吃饭') time. ...

  6. python web中的文件上传与下载

    django 框架下 实现服务端的文件上传与下载: import jsonimport osimport uuid def attachment_upload(request): "&quo ...

  7. python编程中的并发------协程gevent模块

    任务例子:喝水.吃饭动作需要耗时1S 单任务:(耗时20s) for i in range(10): print('a正在喝水') time.sleep(1) print('a正在吃饭') time. ...

  8. python编程中的并发------多线程threading模块

    任务例子:喝水.吃饭动作需要耗时1S 单任务:(耗时20s) for i in range(10): print('a正在喝水') time.sleep(1) print('a正在吃饭') time. ...

  9. java中如何模拟真正的同时并发请求?

    有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...

随机推荐

  1. python3 文件及文件夹路径相关

    1. #返回当前文件所在的目录 currentDir = path.dirname(__file__) # __file__ 为当前文件 2.获得某个路径的父级目录: parent_path = os ...

  2. 【Kafka】Kafka-数据倾斜问题-参考资料-解决方案

    Kafka-数据倾斜问题-参考资料-解决方案 Spark Master at spark://node-01:7077 kafka 多线程producer 数据 不均匀_百度搜索 kafka 分片使用 ...

  3. 【转载】JAVA-dynamic web module与tomcat

    大致因为java的web系统有多种类型,比如静态的和动态的,然后动态的java web project要设置dynamic web module,也就是动态网页模型,他必须要喝对应的服务器搭配好了才能 ...

  4. 解析oui.txt文件,通过MAC前缀获取Organization

    1.前言 OUI是指Organizationally unique identifier  (组织唯一标识符),签发给各类组织的唯一标识符.MAC地址共有6个字节48位组成,前3个字节体现了OUI,其 ...

  5. Spring(十七):Spring AOP(一):简介

    背景: 需求: 给一个计算器计算函数执行前后添加日志. 实现: 1)直接在函数中修改代码: IArithmeticCalculator.java接口类 package com.dx.spring.be ...

  6. VS2013开发一个简单的asmx接口程序

    一.开发和调试 1:创建一个ASP.NET web应用程序 2:选择空的模板 3:系统生成项目目录 4:右键项目-添加项-新建项 5:选择Web  服务(ASMX) 6:选择之后项目中会有一个Test ...

  7. IncrediBuild 2.40 过期时间

    IncrediBuild 2.40的License有2个文件CoordLicense.dat和AgentLicense.dat,分别位于Coordinator和Agent安装目录下,这两个文件都是RS ...

  8. Android 为何比 iOS 卡?【转载】

    Android 卡是必须的,当你的手机装了 20 多个 app,那不卡才叫见鬼了呢,我手机微信都打不开,手机直接自动重启啦~哪种东西生来就是完美的呢?即便是台式机,也是越用越慢.换句话,如果没有特别原 ...

  9. SuperMap打包部署要点

    折腾了一段时间,终于要发布一个版本了,但SuperMap程序怎么发布呢,需要些什么必要条件呢?本来想问问超图的技术人员的,但都没人理我,估计都去开大会去了. 下面是自己测试出来的结果,主要是根据Sup ...

  10. SQL 之 查询操作重复记录

    有时,我们的数据表中会存在一些冗余数据,这就要求我们查询并操作这些冗余数据. 一.查询表中重复记录 例如,查找重复记录是根据单个字段(peopleId)来判断 SELECT * FROM Tpeopl ...