Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PyCon2014China-Zhuhai-jeff
Search
Zoom.Quiet
November 17, 2014
Technology
0
72
PyCon2014China-Zhuhai-jeff
141115 in Zhuhai
http://zoomq.qiniudn.com/CPyUG/PyCon2014China/141115zh-pm8-jeff.MP3
Zoom.Quiet
November 17, 2014
Tweet
Share
More Decks by Zoom.Quiet
See All by Zoom.Quiet
PyCon2014China-Zhuhai-high performance
zoomquiet
0
150
PyCon2014China-Zhuhai-meta programming
zoomquiet
1
120
PyCon2014China-Zhuhai-bpm.py
zoomquiet
0
93
PyCon2014China-Zhuhai-luna kv db
zoomquiet
0
88
PyCon2014China-Zhuhai-seed studio
zoomquiet
0
79
PyCon2014China-Zhuhai-Docker Registry Build By Python
zoomquiet
0
92
PyCon2014China-Zhuhai-pythonic front-end
zoomquiet
0
99
DevFest2014-Zhuhai-Polymer
zoomquiet
0
390
TEDxJLUZH MOMENT future
zoomquiet
0
350
Other Decks in Technology
See All in Technology
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
1
310
Databricksで完全履修!オールインワンレイクハウスは実在した!
akuwano
0
110
アジャイル脅威モデリング#1(脅威モデリングナイト#8)
masakane55
3
230
Bazel for Ruby (RubyKaigi 2025)
p0deje
0
120
Notion x ポストモーテムで広げる組織の学び / Notion x Postmortem
isaoshimizu
1
120
持続可能なドキュメント運用のリアル: 1年間の成果とこれから
akitok_
1
220
Стильный код: натуральный поиск редких атрибутов по картинке. Юлия Антохина, Data Scientist, Lamoda Tech
lamodatech
0
800
Microsoft の SSE の現在地
skmkzyk
0
170
React ABC Questions
hirotomoyamada
0
550
4/16/25 - SFJug - Java meets AI: Build LLM-Powered Apps with LangChain4j
edeandrea
PRO
2
130
地味にいろいろあった! 2025春のAmazon Bedrockアップデートおさらい
minorun365
PRO
1
480
PostgreSQL Log File Mastery: Optimizing Database Performance Through Advanced Log Analysis
shiviyer007
PRO
1
140
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.2k
The Language of Interfaces
destraynor
157
25k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
The Invisible Side of Design
smashingmag
299
50k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.1k
Documentation Writing (for coders)
carmenintech
69
4.7k
Fireside Chat
paigeccino
37
3.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Visualization
eitanlees
146
16k
The Pragmatic Product Professional
lauravandoore
33
6.6k
Become a Pro
speakerdeck
PRO
27
5.3k
Embracing the Ebb and Flow
colly
85
4.7k
Transcript
None
万万没想到之: Python Web异步编程记
[email protected]
本栏⺫⽬目由“珠三⾓角技术沙⻰龙”赞助播出 蕉爷,你姓蕉吗? Yeah!爷姓蕉!
本栏⺫⽬目由“⾳音乐说”赞助播出 觉得我好听就闪聊⼀一下呗
本栏⺫⽬目由“萌叔漫玩”赞助播出 ⼩小妹妹,你看⼤大叔萌萌哒,有⽊木有
@jeff_kit @姐夫 前珠三⾓角技术沙⻰龙⾸首席组委 Toraysoft co-founder Toraysoft ⾸首席码农
举个栗⼦子开始 = / A ? / 0 0 / 2
听题:写⼀一个搜索歌曲的接⼝口
Django ⼀一下 uwsgi --http :8000 --module pyconf2014.wsgi --processes 1
ab之 500秒!
改进#1 uwsgi --http :8000 --module pyconf2014.wsgi --processes 10
再ab之 50秒!
嗯!启动100条进程就 可以了!
问题在哪? • 同步⺴⽹网络请求耗时⻓长,前⾯面的请求导致后续的请求阻 塞。 • 最⼤大进程数就是最⼤大并发数。 • 消耗巨⼤大的服务器资源。 • 请求队列爆掉,如同被DDOS!
异步解决⽅方案 • ⾮非阻塞IO + 异步调度 • select,epoll,kqueue
说⼈人话 • web服务器请求第三⽅方服务的时候,交出控制权,返 回去受理新的⽤用户请求。 • 第三⽅方服务有返回的时候,通知web服务器进程,把 结果返回给⽤用户。
? / I A= K / 0 02 / 0
02 A= K
异步web框架哪家强? • 没有异步web框架,wsgi是同步标准。 • 那是web server的事⼉儿。
异步webserver哪家强? • twisted,超重量级。略。 • Tornado,既是server,也是framework。 • Gevent兼容的uwsgi Contailer,uWsgi,Gunicron。
Tornado
作为Server python run_tornado.py
ab⼀一下 5秒!
回调?⽆无爱!耶!yield!
优点 • 单线程,⾼高并发 • 低能耗,⾼高效率
可惜 • 回调模型⽆无爱 • yield伪同步模式⼊入侵性太强 (第三⽅方sdk要重新实 现) • server与框架耦合度太⾼高,⼊入侵性太强+1, 不能使⽤用
熟悉的框架作业。 • 作为wsgi server,未能发挥其优势
Gevent! • Greenlet • libEvent • monkey_patch()!
认识Gevent
Gevent能 • 让你按原来的⽅方式写代码。 • 让同步编写的代码,异步地执⾏行。 • 让单线程也并发,且⽐比多线程更⾼高效环保。 • 让原⽣生的thread变成green thread。
Gevent + wsgi • uWsgi
uWsgi • 修改处理器的类型即可 processes => gevent • patch all:— gevent-monkey-patch
代码,还是原来的味 uwsgi --http :8000 --module pyconf2014.wsgi --gevent 100 --gevent-monkey-patch
再ab⼀一下 5秒!
但,uWsgi + Django的泪 • uWsgi的对thread的patch有问题 • 如果django的view有访问数据库,则数据库连接⾮非 线程(协程)安全。 • databasewrapper
objects created in a thread can only be used in that same thread。
Gunicron + Django • Gunicron,patch完美 • 但,使⽤用Django数据库连接池需谨慎!⾼高并发导致 占⽤用⼤大量的数据库连接。
万万没想到 python web异步化,配个参数就完了
谢谢