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-bpm.py
Search
Zoom.Quiet
November 17, 2014
Technology
0
87
PyCon2014China-Zhuhai-bpm.py
141115 in Zhuhai
http://zoomq.qiniudn.com/CPyUG/PyCon2014China/141115zh-pm1-bpm.py.MP3
Zoom.Quiet
November 17, 2014
Tweet
Share
More Decks by Zoom.Quiet
See All by Zoom.Quiet
PyCon2014China-Zhuhai-high performance
zoomquiet
0
140
PyCon2014China-Zhuhai-meta programming
zoomquiet
1
110
PyCon2014China-Zhuhai-luna kv db
zoomquiet
0
86
PyCon2014China-Zhuhai-seed studio
zoomquiet
0
71
PyCon2014China-Zhuhai-Docker Registry Build By Python
zoomquiet
0
84
PyCon2014China-Zhuhai-jeff
zoomquiet
0
65
PyCon2014China-Zhuhai-pythonic front-end
zoomquiet
0
95
DevFest2014-Zhuhai-Polymer
zoomquiet
0
380
TEDxJLUZH MOMENT future
zoomquiet
0
340
Other Decks in Technology
See All in Technology
速くて安いWebサイトを作る
nishiharatsubasa
10
12k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
57k
スタートアップ1人目QAエンジニアが QAチームを立ち上げ、“個”からチーム、 そして“組織”に成長するまで / How to set up QA team at reiwatravel
mii3king
2
1.5k
プロセス改善による品質向上事例
tomasagi
2
2.5k
MC906491 を見据えた Microsoft Entra Connect アップグレード対応
tamaiyutaro
1
540
人はなぜISUCONに夢中になるのか
kakehashi
PRO
6
1.6k
Tech Blogを書きやすい環境づくり
lycorptech_jp
PRO
1
240
利用終了したドメイン名の最強終活〜観測環境を育てて、分析・供養している件〜 / The Ultimate End-of-Life Preparation for Discontinued Domain Names
nttcom
2
190
オブザーバビリティの観点でみるAWS / AWS from observability perspective
ymotongpoo
8
1.5k
Developer Summit 2025 [14-D-1] Yuki Hattori
yuhattor
19
6.2k
『衛星データ利用の方々にとって近いようで触れる機会のなさそうな小話 ~ 衛星搭載ソフトウェアと衛星運用ソフトウェア (実物) を動かしながらわいわいする編 ~』 @日本衛星データコミニティ勉強会
meltingrabbit
0
140
Larkご案内資料
customercloud
PRO
0
650
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
44
13k
Done Done
chrislema
182
16k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
How to Ace a Technical Interview
jacobian
276
23k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Building an army of robots
kneath
303
45k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Six Lessons from altMBA
skipperchong
27
3.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Producing Creativity
orderedlist
PRO
344
39k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Transcript
None
芯雲流程引擎 使用Python协程解决阻塞问题
[email protected]
Service Orchestration DNS 系统 接入层 系统 告警 系统 配置管理 系统
Game Server SA 系统 IaaS 系统 官网 系统
Python with @task
阻塞问题 result = call_func() result 无法立即获得,所谓“阻塞”
I/O 阻塞 bytes = tcp_socket.recv(4096) 网络I/O操作需要时间,所谓“I/O 阻塞”
例子 连接 发送 接收
回调 def on_received(bytes): ….. def on_sent(sock): sock.recv(on_received) def on_connect(sock): sock.send(‘xxx’,
on_sent) connect(‘a.b.c.d’, on_connect) 上下文
CALLBACK HELL
Logic Locality 最小化开发人员阅读流程代码的眼球移动距离
协程可以表达I/O阻塞 def some_process(): sock = connect(‘a.b.c.d’, on_connect) sock.send(‘xxx’) bytes =
sock.recv(on_received) …. 上下文 locals()
流程阻塞 ip = res.request_new_server(model=’B6’) 调用“外部系统”需要时间,所谓“流程阻塞”
流程阻塞 yes_no = smcs.wechat_approve(‘reboot?’) 人工审批需要时间,所谓“流程阻塞”
协程也可以表达流程阻塞 def some_process(): ip = res.request_new_server(model=’B6’) yes_no = smcs.wechat_approve(‘deploy %s?’
% ip) if yes_no: ijobs.exec_job(‘deploy’, ip)
流程引擎 申请机器 部署 修改DNS 引擎 流程
各式Event Loop 连接 发送 接收 event loop 协程 gevent tulip
/ asyncio tornado evergreen eventlet
所谓Event Loop def some_process(): sock = connect(‘a.b.c.d’, on_connect) sock.send(‘xxx’) bytes
= sock.recv(on_received) …. 协程 Event Loop fd_map = {} [fd, read] => coroutine 操作系统 select kqueue epoll recv好了告诉我, 我先睡你那了 select(sock, EV_READ) fd 132 可读了 fd 132 对应的协程醒醒 开读了
协程可以存数据库的 def some_process(): ip = res.request_new_server(model=’B6’) yes_no = smcs.wechat_approve(‘deploy %s?’
% ip) if yes_no: ijobs.exec_job(‘deploy’, ip) 协程 引擎 event_map = {} event => coroutine 外部系统 审批好了告诉我, 我先睡你那了 wechat approve 审批结果有了 审批好了,协程醒醒 开工了 mysql import cPickle bytes = cPickle.dumps(coroutine)
Python协程实现 • yield • stackless python / pypy • greenlet
/ python-fibers / stacklet / libgevent
Ultimate Coroutine Scheduler • 语言:Java for true parallelism • 协程:co-routine
with bytecode weaver • I/O阻塞:包装NIO • 流程阻塞:event map,持久化可选 https://github.com/taowen/daili
协程大法好 招聘:
[email protected]