Submit Search
Sohu邮箱的python经验
2 likes
1,548 views
Ryan Poy
1 of 38
Download now
Downloaded 23 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
More Related Content
PDF
Node予備校 vol.1 名古屋
Mori Shingo
PDF
AngularFireで楽々バックエンド
Yosuke Onoue
PPTX
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
PDF
今からでも大丈夫!Firebase入門
Tomoki Koga
PDF
Grafana Dashboards as Code
Takuhiro Yoshida
PDF
20150101勉強会 dokku alt
Shugo Numano
PPTX
JavaScriptから利用するFirebase
Takuji Shimokawa
PDF
Openresty
ogawatti
Node予備校 vol.1 名古屋
Mori Shingo
AngularFireで楽々バックエンド
Yosuke Onoue
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
今からでも大丈夫!Firebase入門
Tomoki Koga
Grafana Dashboards as Code
Takuhiro Yoshida
20150101勉強会 dokku alt
Shugo Numano
JavaScriptから利用するFirebase
Takuji Shimokawa
Openresty
ogawatti
What's hot
(20)
PDF
Ingress on GKE/GCE
shouta yoshikai
PDF
静的サイトどこにする?
ogawatti
PDF
Nuxt.js + microCMS + netlify
ogawatti
PDF
AWS SDK for Smalltalk
Sho Yoshida
PDF
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
PDF
Docker+CoreOS+GCEで自動スケール分散レイトレ
peryaudo
PDF
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
PDF
Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]
創史 花村
PDF
Apache Drill で見る Twitter の世界
Masaru Watanabe
PDF
2日間Fabricを触った俺が 色々解説してみる
airtoxin Ishii
PDF
Fabric
Joe_noh
KEY
Web Operations and Perl kansai.pm#14
Masahiro Nagano
PDF
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Kohei KaiGai
PPTX
Gocon2017:Goのロギング周りの考察
貴仁 大和屋
PDF
Kibanaでsysstatを可視化する
Kensuke Maeda
PDF
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Preferred Networks
PDF
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
PDF
Stream processing and Norikra
SATOSHI TAGOMORI
KEY
Fabricでサーバー管理をDRYにしよう
max747
PDF
nginx入門
Takashi Takizawa
Ingress on GKE/GCE
shouta yoshikai
静的サイトどこにする?
ogawatti
Nuxt.js + microCMS + netlify
ogawatti
AWS SDK for Smalltalk
Sho Yoshida
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
Docker+CoreOS+GCEで自動スケール分散レイトレ
peryaudo
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]
創史 花村
Apache Drill で見る Twitter の世界
Masaru Watanabe
2日間Fabricを触った俺が 色々解説してみる
airtoxin Ishii
Fabric
Joe_noh
Web Operations and Perl kansai.pm#14
Masahiro Nagano
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Kohei KaiGai
Gocon2017:Goのロギング周りの考察
貴仁 大和屋
Kibanaでsysstatを可視化する
Kensuke Maeda
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Preferred Networks
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
Stream processing and Norikra
SATOSHI TAGOMORI
Fabricでサーバー管理をDRYにしよう
max747
nginx入門
Takashi Takizawa
Ad
Viewers also liked
(6)
PDF
Marie Florestal
Marie Florestal
PPT
Quality Systems Investigations
Marie Florestal
PPTX
Body Vana Community
berk0745
PDF
Upgrading Share Point Portal Server 2003 Customizations To Share Point Server...
RCSLLC
PDF
Michael Lyons-Johnston Portfolio
mlyonsps
PDF
Yatin Patel
yatin112
Marie Florestal
Marie Florestal
Quality Systems Investigations
Marie Florestal
Body Vana Community
berk0745
Upgrading Share Point Portal Server 2003 Customizations To Share Point Server...
RCSLLC
Michael Lyons-Johnston Portfolio
mlyonsps
Yatin Patel
yatin112
Ad
Sohu邮箱的python经验
1.
搜狐邮箱的Python经验 彭 一 ryanpoy@gmail.com
2.
今天的话题 • 优雅的发布Python项目 • 优秀的WEB框架-Tornado •
加速你的Python代码 • 简化你的C代码
3.
优雅的发布Python项目
4.
抓狂的现象 • 第3方依赖多,下载速度慢 • 内网服务器不能连外网 •
老版本不再提供下载 • GFW
5.
pypiserver — 是用来搭建本地python package的工具 —
优点 — 轻量简单,易安装 https://pypi.python.org/packages/source/p/pypiserver/pypiserver-1.1.0.zip — 方便使用 gunicorn -w4 -b0.0.0.0:8080 ‘pypiserver:app(“/var/www/pypidir”)’ –D — package方便管理 pip install –no-install Django –d /var/www/pypydir
6.
pypiserver
7.
fabric — 一个用python实现的,用于项目的推送的工具,类似于 ruby中的capistrano — 优点 —
加强版SSH — 支持本地和远程操作 — 参数灵活 — 完整的日志输出
8.
fabric-example — fabfile.py — demo.py
9.
fabric-example — 执行 — 更多漂亮的推送脚本 —
fab Project.production git.tar:v1.1 common.deploy — fab Project.production common.rollback — fab Project.production common.health:ProjectName — ……
10.
优秀的WEB框架-Tornado
11.
代码简单 from web import
application class Index: def GET(self):᠋᠌᠍ return 'Hello, GET ! n’ def POST(self):᠋᠌᠍ return 'Hello, POST ! n’ urls = ( '/', 'Index’ ) if __name__ == '__main__’:᠋᠌᠍ app = application(urls, globals())᠋᠌᠍ app.run() import tornado.ioloop᠋᠌᠍ from tornado.web import RequestHandler ᠋᠌᠍ from tornado.web import Application class Index(RequestHandler): def get(self):᠋᠌᠍ self.write('Hello, GET ! n’) def post(self):᠋᠌᠍ self.write('Hello, POST! n’) urls = ( ('/', Index), ) if __name__ == '__main__’:᠋᠌᠍ app = Application(urls).listen(8000)᠋᠌᠍ tornado.ioloop.IOLoop.instance().start()
12.
性能优秀 — 硬件配置: 2*CPU
8G Mem 100GDisk — 2k并发,5w访问 部署 QPS Success 2*Nginx + 4*Tornado 4402 100% 2*Nginx + flup + 4*Django 4207 88% 2*Nginx + flup + 4*webpy 无法响应
13.
成熟 — v3.0 — 案例 —
http://friendfeed.com — http://www.zhihu.com
14.
RequestHandler生命周期 initalize(self, **kwargs) prepare(self) write_error(self,
status_code, **kwargs) finish(self, chunk=None) get/post/put …
15.
异步请求 import tornado.web as
web class AsyncHandler(RequestHandler): @web.asynchronous᠋᠌᠍ def get(self):᠋᠌᠍ ᠋᠌᠍ url = 'http://example.com'᠋᠌᠍ ᠋᠌᠍ hc = AsyncHTTPClient()᠋᠌᠍ ᠋᠌᠍ hc.fetch(url, callback=self.on_fetch)᠋᠌᠍ ᠋᠌᠍ ᠋᠌᠍ def on_fetch(self, response): do_something_with (response) self.render('template.html') import tornado.web as web ᠋᠌᠍ import tornado.gen as gen class GenAsyncHandler(RequestHandler): @web.asynchronous᠋᠌᠍ @gen.engine᠋᠌᠍ def get(self): url = 'http://example.com' hc = AsyncHTTPClient() response = yield hc.fetch(url) do_something_with (response) self.render('template.html')
16.
Connection — 基于MySQLdb封装 — 使用技巧 —
全局 db = Connection(host = 'localhost:3306', database = 'centerdata', user = 'root', password = '') — 防止 mysql server gone away ping_db = lambda: db.query('show variables’) tornado.ioloop.PeriodicCallback(ping_db, 600 * 1000).start()
17.
Tornado+Django Tornado的高性能 Django的ORM Django的Admin
18.
创建项目结构 — django-admin.py startproject Demo —
cd Demo — python manage.py startapp app — touch application.py — mv app/views.py app/ controllers.py
19.
修改settings.py
20.
修改urls.py
21.
修改application.py
22.
事务处理 利用django的TransactionMiddleware
23.
自动事务处理 class BaseController(object): def prepare(self):᠋᠌᠍ pass def
write_error(self, status_code, **kwargs):᠋᠌᠍ pass ᠋᠌᠍ def finish (self, chunk=None):᠋᠌᠍ pass
24.
一些思考 — 数据库是否要异步? — 有耗时长的同步操作? —
存在大文件上传?
25.
加速你的Python
26.
例子-Python
27.
例子-纯C
28.
swig — example.h — example.c
29.
swig — example.i — 编译 —
swig –python example.i # 生成example.py 和 example_wrap.c — gcc example.c example_wrap.c –fPIC -I/usr/include/python2.7/ -shared -o _example.so # 生成so文件,注意一定要下划线开始 — 执行
30.
ctypes — pointer.c — 编译成so —
python调so
31.
简化你的C代码
32.
应用场景 — 修改一个第3方的C库 — 业务复杂的C代码 —
业务功能、程序稳定 为主要要求 — 性能可以有所损耗
33.
C调用Python步骤 初始Python环境 导入Python模块 获取方法 设置方法参数 调用方法 释放Python环境
34.
例子-demo.py def deliver(ip, sender,
receiver, data): ''' ip,sender 是否有效,是否在黑名单; recevier 是否有效,是否设置转发, 是否自动回复; data 是否有违禁内容 … 其它复杂的业务逻辑 ''' # 非常复杂的业务逻辑实现代码
35.
例子-C代码
36.
其它用法 — NULL写成Py_None — Py_DECREF
和 Py_XDECREF PyObject* p = Py_None; if (p) Py_DECREF(p) ó Py_XDECREF(p) — 设置tuple类型的参数 PyObject* py_tuple = PyTuple_New(size) PyTuple_SetItem(py_tuple, idx, v) — 设置dict类型的参数 PyObject* py_dict = PyDict_New() PyDict_SetItem(py_dict, k, v)
37.
回顾 • 优雅的发布Python项目 • pypiserver •
fabric • 优秀的WEB框架-Tornado • 基本用法 • 与Django相结合 • 加速你的Python代码 • swig • ctypes • 简化你的C代码
38.
谢谢
Download