本文為 PyChina 和「編程派」聯(lián)合首發(fā)垒棋,作者為 EarlGrey色查≈访玻「編程派」是一個(gè)專注 Python 學(xué)習(xí)交流的微信公眾號。
9 月 25 日灼卢,第六屆 PyCon China 大會在深圳召開。這是這次大會的第二站活動来农,第一站已在上海成功舉辦鞋真。據(jù)官方介紹,PyCon China 過去 5 年已經(jīng)在北京沃于、上海涩咖、廣州、珠海繁莹、杭州等地舉辦過十幾次大會檩互,影響達(dá)數(shù)萬 Python 開發(fā)者。
這也是筆者接觸 Python 近兩年以來咨演,第一次參加該大會闸昨。雖然此前在社區(qū)里聽說了許多關(guān)于去年大會的負(fù)面言論,大多談到廣告太多薄风,今年組織者在這方面做了不錯(cuò)的改進(jìn)饵较。至少從深圳場的情況來看,干貨挺多遭赂。
深圳站視頻及PPT循诉,請?jiān)诠娞柡笈_回復(fù)”pysz“,獲取分享鏈接撇他。
1. 潘俊勇:腳本化及可視化編程
潘俊勇是一位 Python 老兵茄猫,方向是企業(yè)應(yīng)用開發(fā)。在當(dāng)天的分享中困肩,他結(jié)合自身的工作經(jīng)驗(yàn)募疮,指出了當(dāng)前應(yīng)用開發(fā)存在的問題。
他認(rèn)為僻弹,目前是互聯(lián)網(wǎng)的“大航喊⑴ǎ”時(shí)代,技術(shù)創(chuàng)新的速度很快蹋绽,后端框架每 5 年一變芭毙,前端 web 框架更是半年一變筋蓖。與此同時(shí),技術(shù)發(fā)展變得越來越復(fù)雜退敦,開發(fā)周期更長粘咖,溝通管理的成功更高,應(yīng)用的維護(hù)更加復(fù)雜侈百。而且現(xiàn)在行業(yè)很熱瓮下,開發(fā)人員薪資高,導(dǎo)致大量菜鳥都想轉(zhuǎn)入開發(fā)(筆者也曾經(jīng)這樣想過)钝域。
由于近兩年云計(jì)算的快速發(fā)展讽坏,逐漸開始出現(xiàn)一種云端一體的開發(fā)方式,讓應(yīng)用開發(fā)回歸簡單例证,甚至可以做到無棧開發(fā)路呜。其中一個(gè)趨勢,就是可視化編程织咧。
基于 PaaS 平臺及其提供的各種 API 服務(wù)胀葱,可視化、腳本化開發(fā)成為可能笙蒙。API 的全面開放抵屿,完全可以處理用戶管理、消息服務(wù)捅位、日志等后端功能晌该,免去后端開發(fā)的需要。這樣的優(yōu)勢是開發(fā)速度快绿渣,專注于產(chǎn)品朝群,而不是僅僅寫代碼。
他以 Blockly 為例說明了可視化編程的好處中符。Blockly 是谷歌推出的一款可視化編程編輯器庫姜胖,可以將圖形化的程序翻譯成 js、dart淀散、Python 等多種語言右莱。目前主要應(yīng)用于編程學(xué)習(xí)領(lǐng)域,尤其是 5-7 歲低齡兒童學(xué)習(xí)編程档插。
最后慢蜓,他之處,未來技術(shù)的門檻會越來越低郭膛,需要更懂產(chǎn)品的 Creator晨抡,而不是只知道編程的 Geek。
2. 丁來強(qiáng):Python Hooking Technology
丁來強(qiáng)是美國頂尖大數(shù)據(jù)公司Splunk的資深 Python 工程師,擁有 10 多年的工作經(jīng)驗(yàn)耘柱。在上海站如捅,他分享了如何使用 Python 進(jìn)行高效大數(shù)據(jù)工作流與任務(wù)調(diào)度。而在深圳場调煎,他帶來了同樣精彩的 Hooking 技術(shù)分享镜遣,演示了許多平常使用較少但卻非常奇妙的功能。
在他看來士袄,Hooking 技術(shù)在 Python 中可以從以下四個(gè)層面進(jìn)行應(yīng)用:
- 對象和可變性
- 系統(tǒng)層面的 hook
- 語言層面的 hook
- 解釋器層面的 hook
Hooking 技術(shù)的使用場景也非常多悲关,可以用于 monkey pathcing,做單元測試娄柳,錯(cuò)誤處理寓辱,甚至是一些簡單的自動代碼修復(fù)。此外西土,還可以使用 hooking 技術(shù)對代碼進(jìn)行動態(tài)分析讶舰,如性能分析鞍盗、沖突檢查等需了。
在演講過程中,丁來強(qiáng)對上述使用場景給出了大量的代碼實(shí)例般甲,看的非常過癮肋乍。詳細(xì)的情況請回復(fù)關(guān)鍵詞“pysz”下載相關(guān)的 PPT。
上述這些 hooking 技術(shù)敷存,都是 Python 設(shè)計(jì)時(shí)就提供的靈活性支持墓造,而非大家所理解的 hack 技術(shù)。這點(diǎn)在問答環(huán)節(jié)丁來強(qiáng)也進(jìn)行了特別強(qiáng)調(diào)锚烦。
3. 李力:騰訊云的 Python 實(shí)踐
這是當(dāng)天上午的最后一個(gè)演講觅闽。嘉賓是來自騰訊云的布道師、CVM技術(shù)負(fù)責(zé)人李力涮俄。據(jù)說這是他第一次參加這樣的公開活動蛉拙,也是第一次在外部介紹 Python 在騰訊云的實(shí)踐。
騰訊是一家大量使用 C++ 的公司彻亲,講者當(dāng)初也是作為 C++ 程序員進(jìn)入該公司的孕锄。2007 年,開始接觸了 Python苞尝,很快就將其認(rèn)定為一門可以”帶你裝逼帶你飛“的語言畸肆。出于對 Python 在云計(jì)算方面的信心,李力從 2012 年開始在騰訊云推廣使用 Python宙址。
推廣初期碰到了一定的阻力轴脐,這點(diǎn)對于任何想在公司推廣新技術(shù)的人來說都是無法避免的。針對領(lǐng)導(dǎo)們的擔(dān)憂,李力強(qiáng)調(diào)了在公有云中使用 Python 的諸多優(yōu)勢:
- 與 Linux 系統(tǒng)天然貼合豁辉,系統(tǒng)編程 API 與 glibcc 保持一致令野,以前的工具箱仍然適用。
- 是能夠運(yùn)行的偽代碼徽级,開發(fā)效率得到極大提升气破。
- 容易與 C/C++交互,使用 ctypes 可以很方便地調(diào)用 C 代碼餐抢。
- 更容易保持項(xiàng)目的整潔现使。
基于這些考慮,騰訊云開始慢慢嘗試引入 Python旷痕。首先就是改造接入層碳锈,使用 Flask + uWSGI + Nginx 改造了舊的 CGI 接口,使得開發(fā)工作更加簡單欺抗,接口更加現(xiàn)代化售碳。
另外绞呈,騰訊云還將 Python 用于系統(tǒng)編程贸人,開發(fā)了公有云上的宿主機(jī)包管理工具。據(jù)說這個(gè)工具上線幾年來運(yùn)行都沒有出什么問題佃声。一般開發(fā)者很少有將 Python 用于系統(tǒng)編程的艺智,騰訊云之所以選擇 Python,是由于其標(biāo)準(zhǔn)庫與 POSIX 規(guī)范天然貼合圾亏,具備優(yōu)秀的文本處理和分析能力十拣,而且還有完備的網(wǎng)絡(luò)功能等原因。
接下來志鹃,他還介紹了云調(diào)度系統(tǒng)的框架夭问,并分享了在大規(guī)模系統(tǒng)中的應(yīng)用 Python 技術(shù)的一些坑。
另外曹铃,總的來看缰趋,這場演講可能是現(xiàn)場笑聲最多的一次。
4. River:QPython - Python for Android
聽 River 的分享之前铛只,我以為 QPython 只是一個(gè)讓我在安卓手機(jī)上練習(xí)寫 Python 代碼的 APP 而已埠胖。但是聽完之后,我覺得自己完全想錯(cuò)了淳玩。QPython 的野心是做一個(gè)生態(tài)直撤。
一開始,River 通過一個(gè)利用 QPython 調(diào)用翻譯 API 的示例蜕着,演示了一般程序員的具體使用場景谋竖。接著他介紹了自己開發(fā) QPython 的由來红柱。
QPython 的團(tuán)隊(duì)中目前只有兩個(gè)人左右,而擁有的國內(nèi)外用戶已經(jīng)達(dá)百萬蓖乘。這一切都起源于 River 等人對 Android Studio 編譯速度的不滿锤悄。在 River 看來,并不是所有的 APP 都需要原生的速度嘉抒,很多時(shí)候開發(fā)速度更重要零聚。
目前 QPython 正在逐步的開源當(dāng)中,功能也比剛開始時(shí)豐富了許多些侍。針對用戶反饋的手機(jī)上編碼不方便的問題隶症,QPython 團(tuán)隊(duì)推出了 qpy.io 服務(wù)(國外服務(wù)器,國內(nèi)訪問受限)岗宣。通過該服務(wù)蚂会,用戶可以在瀏覽器中在線編輯手機(jī)上的代碼,然后在手機(jī)上進(jìn)行調(diào)試耗式,而且支持在線導(dǎo)出 APK胁住。
據(jù)介紹,QPython 目前支持多種 APP 開發(fā)庫刊咳,如 Bottle(內(nèi)置)彪见、Django、Flask 和 Kivy 等芦缰。同還可以通過 QSL4A企巢,讓開發(fā)者充分利用安卓手機(jī)的特性枫慷。
談到 QPython 的未來让蕾,River 表示非常有信心,未來將在國內(nèi)建立服務(wù)或听,開放第三方庫提交探孝,并開發(fā) QScript 市場。
5. 何世友:ASGI 草案誉裆,Python 終于等到了
何世友是科技媒體愛范兒的 CTO顿颅。經(jīng)常看愛范兒上的文章足丢,只是沒想到愛范兒使用的語言也是 Python粱腻。這場開始的大概是下午兩點(diǎn)多的樣子。說實(shí)話那個(gè)時(shí)候大家都挺困的斩跌。何世友一上來绍些,據(jù)說就用了賴勇浩教的一招演講技巧,讓睡意濃濃的現(xiàn)場觀眾們起立為他“鼓掌”了 5 秒鐘耀鸦。
他的演講主題是「ASGI 草案柬批,Python 終于等到了」啸澡。ASGI 的全稱是異步服務(wù)網(wǎng)關(guān)接口(Asynchronous Server Gateway Interface),是今年才由 Django 工作組提出的一個(gè)協(xié)議氮帐,目前還屬于草案階段嗅虏。國內(nèi)關(guān)注該協(xié)議的人非常少,幾乎沒有相關(guān)的中文介紹上沐。
為了說明 ASGI 的由來皮服,他從 Tim Bernes Lee 1989 年發(fā)明萬維網(wǎng)開始,帶現(xiàn)場觀眾走過了從 CGI 到 WSGI 的十年發(fā)展歷程参咙。一開始萬維網(wǎng)只能傳輸靜態(tài)文件冰更,為了滿足編寫動態(tài)內(nèi)容的需求,1993 年 CGI 由此誕生昂勒。但是使用 Python 編寫 CGI 的方式特別的繁瑣蜀细、低效,2003 年 Python 官方推出了 WSGI戈盈。該協(xié)議的推出奠衔,是為了統(tǒng)一標(biāo)準(zhǔn),提高效率塘娶。甚至有開發(fā)者說归斤,”有了 WSGI 之后,寫 web 框架就像喝水一樣簡單刁岸≡嗬铮“
WSGI 提出之時(shí),主流的網(wǎng)絡(luò)協(xié)議還只有 HTTP虹曙。但是 2011 年迫横,WebSocket 標(biāo)準(zhǔn)完成。次年酝碳,HTTP2 協(xié)議敲定矾踱。如今,HTTP 2 協(xié)議和 WebSocket 協(xié)議的使用越來越廣泛疏哗。微信小程序的網(wǎng)絡(luò)請求甚至規(guī)定了只能走 HTTP2 協(xié)議呛讲。因此,WSGI 協(xié)議確實(shí)到了需要更新的時(shí)候了返奉。
在沒有 ASGI 的情況下贝搁,目前使用 Python 來處理這三種協(xié)議,需要使用多個(gè)框架芽偏,項(xiàng)目復(fù)雜度增加雷逆。而 ASGI 的目標(biāo),就是在一個(gè)框架中直接處理三種協(xié)議請求哮针。
ASGI 是基于 WSGI 的关面,是對后者的補(bǔ)充坦袍,由 protocol server、channel layer和 application 三層組成等太。如果 ASGI 協(xié)議最終普及捂齐,何世友認(rèn)為能夠顯著提高開發(fā)效率,降低基礎(chǔ)代碼的遷移成本缩抡;但是同時(shí)也提示了需要注意的事項(xiàng):
- 需要更強(qiáng)力的 interface server
- 需要特殊的 scaling 技巧
- 需要和 WSGI 和諧共處等奠宜。
6. 張其川:自動化運(yùn)維和工具
Python 在運(yùn)維方面的應(yīng)用,可能是最廣泛的瞻想。這場的嘉賓張其川是自學(xué) Python 的压真,自己還寫了一個(gè)自動化運(yùn)維的開源項(xiàng)目——CheungSSH。
在他看來蘑险,大數(shù)據(jù)和云計(jì)算時(shí)代滴肿,服務(wù)器的規(guī)模空前龐大佃迄,而人力成本則在不斷攀升泼差,自動化成為企業(yè)的必然需求。而選擇 Python 做自動化呵俏,理由非常直接:
- 簡單易學(xué)
- 使用簡單堆缘,代碼量少
- 開源,學(xué)習(xí)方便普碎,開發(fā)速度更快
對于以上三點(diǎn)吼肥,相信其他的 Python 愛好者都會認(rèn)同。
他提出麻车,自動化的目標(biāo)就是省錢缀皱,無論使用的是什么工具,puppet 還是 ansible 绪氛,最終的標(biāo)準(zhǔn)都是能省多少錢唆鸡。
如果你去看直播視頻的話涝影,你會發(fā)現(xiàn)這也是一位挺有趣的嘉賓枣察。
7. 胡國濤:WEGO 的開源之旅
現(xiàn)在微信這么火,又出了小程序這個(gè)原子彈燃逻,作為 Python 程序員的我們?nèi)绻胱鑫⑿殴娞栭_發(fā)該怎么辦序目?開源界其實(shí)有多個(gè)可選的框架,這次大會邀請到的是一個(gè)名叫 WEGO 的微信開發(fā)框架背后的團(tuán)隊(duì)成員伯襟。
和其他開源項(xiàng)目一樣猿涨,WEGO 項(xiàng)目的起源都是因?yàn)殚_發(fā)者怕麻煩。微信公眾號的開發(fā)姆怪,在胡國濤及其團(tuán)隊(duì)看來是比較麻煩的叛赚,主要體現(xiàn)在接口繁多澡绩、文檔錯(cuò)亂和報(bào)錯(cuò)模糊。而且對于 Python 程序員來說俺附,還得去學(xué)習(xí) JS肥卡,麻煩的程度又高了很多。
WEGO 團(tuán)隊(duì)對自己的框架還是非常的自信事镣,稱有清晰的接口步鉴、完整的文檔和詳細(xì)的報(bào)錯(cuò),并給出了具體的代碼進(jìn)行說明璃哟。
談點(diǎn)筆者的個(gè)人觀點(diǎn)氛琢。目前 WEGO 項(xiàng)目在中文網(wǎng)絡(luò)上的介紹非常少,簡單的百度搜索幾乎找不到任何內(nèi)容随闪。只能從項(xiàng)目的 Github 項(xiàng)目地址了解阳似。而其中列出的文檔,也并不是那么完整铐伴。如果想讓其他 Python 開發(fā)者使用該框架的話障般,希望 WEGO 團(tuán)隊(duì)再努力完善一下官方文檔。
8. 饞師:Python 開發(fā)輔助軟件提高工作效率
效率是開發(fā)者不變的追求盛杰。這場分享來自有五年 Python 編程經(jīng)驗(yàn)的后端開發(fā)者饞師挽荡。他主要分享了以下三種利用 Python 提高工作效率的方式:
- 用Python開發(fā)比AutoHotkey更好用的熱鍵軟件,并同時(shí)支持Windows即供、Linux定拟、Mac OS三種系統(tǒng)。
- 通過Monkey Patching實(shí)現(xiàn)運(yùn)行時(shí)調(diào)用棧追蹤逗嫡,用于快速研究代碼流程(10分鐘弄懂一個(gè)框架)青自,及實(shí)現(xiàn)非侵入式流程測試(不用埋點(diǎn),不用加測試專用的函數(shù)參數(shù))驱证。
- 使用逐行注釋法明示代碼書寫意圖延窜,成倍提升代碼可讀性和項(xiàng)目維護(hù)效率。
具體情況大家請看視頻抹锄。
9. 石恩名:一種可視化爬蟲技術(shù)分享
現(xiàn)在互聯(lián)網(wǎng)行業(yè)對數(shù)據(jù)的重視程度越來越高逆瑞,普通的業(yè)務(wù)工作人員獲取數(shù)據(jù)的需求也越來越大。針對這類需求伙单,逐漸出現(xiàn)了許多做可視化爬蟲的公司获高,最突出的技術(shù)特點(diǎn)就是無需編碼,可視化配置吻育。這場分享中念秧,廣州一家大數(shù)據(jù)公司的技術(shù)經(jīng)理分享了自己網(wǎng)絡(luò)爬蟲的框架,并介紹了如何解決構(gòu)建可視化爬蟲時(shí)碰到的問題布疼。
在技術(shù)棧的選擇上摊趾,我們這里只關(guān)注與爬蟲爬取和存儲直接相關(guān)的技術(shù)币狠。該公司采用的是 Pyspider + PhantomJS 爬取頁面,然后將結(jié)果存儲在 mongoDB 和 redis 中砾层。在數(shù)據(jù)庫的選擇上总寻,講者在某臺機(jī)器上的結(jié)果顯示如下,MongoDB 和 Redis 配合采集的速率優(yōu)勢明顯梢为。
分享者還探討了使用機(jī)器學(xué)習(xí)技術(shù)的可能渐行,可以用來計(jì)算兩個(gè)頁面的 HTML DOM 相似度,再通過多個(gè)相似頁面計(jì)算 URL 正則表達(dá)式铸董,來構(gòu)建判別器祟印。
在本文中不方便詳細(xì)回顧具體的框架設(shè)計(jì)。如果你對設(shè)計(jì)爬蟲系統(tǒng)有興趣的話粟害,推薦參考這里分享的框架蕴忆。
10. 湯英康:大數(shù)據(jù)監(jiān)控警告系統(tǒng)
最后這名分享者給出了一套完整的大數(shù)據(jù)監(jiān)控告警平臺產(chǎn)品方案,對于沒有接觸過數(shù)據(jù)監(jiān)控系統(tǒng)設(shè)計(jì)的來說極其具有參考價(jià)值悲幅。
根據(jù)講者的分享套鹅,監(jiān)控系統(tǒng)主要涉及數(shù)據(jù)采集集、數(shù)據(jù)存儲汰具、數(shù)據(jù)可視化卓鹿、數(shù)據(jù)警告等四大部分,同時(shí)要求系統(tǒng)做到高可用留荔、高可伸縮和高并發(fā)吟孙。
最終的技術(shù)架構(gòu)如下圖所示: