本文爲 PyChina 和「編程派」聯合首發,做者爲 EarlGrey。「編程派」是一個專一 Python 學習交流的微信公衆號。前端
9 月 25 日,第六屆 PyCon China 大會在深圳召開。這是此次大會的第二站活動,第一站已在上海成功舉辦。據官方介紹,PyCon China 過去 5 年已經在北京、上海、廣州、珠海、杭州等地舉辦過十幾回大會,影響達數萬 Python 開發者。程序員
這也是筆者接觸 Python 近兩年以來,第一次參加該大會。雖然此前在社區裏據說了許多關於去年大會的負面言論,大多談到廣告太多,今年組織者在這方面作了不錯的改進。至少從深圳場的狀況來看,乾貨挺多。web
深圳站視頻及PPT,請在公衆號後臺回覆」pysz「,獲取分享連接。正則表達式
潘俊勇是一位 Python 老兵,方向是企業應用開發。在當天的分享中,他結合自身的工做經驗,指出了當前應用開發存在的問題。redis
他認爲,目前是互聯網的「大航海」時代,技術創新的速度很快,後端框架每 5 年一變,前端 web 框架更是半年一變。與此同時,技術發展變得愈來愈複雜,開發週期更長,溝通管理的成功更高,應用的維護更加複雜。並且如今行業很熱,開發人員薪資高,致使大量菜鳥都想轉入開發(筆者也曾經這樣想過)。數據庫
因爲近兩年雲計算的快速發展,逐漸開始出現一種雲端一體的開發方式,讓應用開發迴歸簡單,甚至能夠作到無棧開發。其中一個趨勢,就是可視化編程。編程
基於 PaaS 平臺及其提供的各類 API 服務,可視化、腳本化開發成爲可能。API 的全面開放,徹底能夠處理用戶管理、消息服務、日誌等後端功能,免去後端開發的須要。這樣的優點是開發速度快,專一於產品,而不是僅僅寫代碼。小程序
他以 Blockly 爲例說明了可視化編程的好處。Blockly 是谷歌推出的一款可視化編程編輯器庫,能夠將圖形化的程序翻譯成 js、dart、Python 等多種語言。目前主要應用於編程學習領域,尤爲是 5-7 歲低齡兒童學習編程。後端
最後,他之處,將來技術的門檻會愈來愈低,須要更懂產品的 Creator,而不是隻知道編程的 Geek。微信小程序
丁來強是美國頂尖大數據公司Splunk的資深 Python 工程師,擁有 10 多年的工做經驗。在上海站,他分享瞭如何使用 Python 進行高效大數據工做流與任務調度。而在深圳場,他帶來了一樣精彩的 Hooking 技術分享,演示了許多日常使用較少但卻很是奇妙的功能。
在他看來,Hooking 技術在 Python 中能夠從如下四個層面進行應用:
對象和可變性
系統層面的 hook
語言層面的 hook
解釋器層面的 hook
Hooking 技術的使用場景也很是多,能夠用於 monkey pathcing,作單元測試,錯誤處理,甚至是一些簡單的自動代碼修復。此外,還可使用 hooking 技術對代碼進行動態分析,如性能分析、衝突檢查等。
在演講過程當中,丁來強對上述使用場景給出了大量的代碼實例,看的很是過癮。詳細的狀況請回復關鍵詞「pysz」下載相關的 PPT。
上述這些 hooking 技術,都是 Python 設計時就提供的靈活性支持,而非你們所理解的 hack 技術。這點在問答環節丁來強也進行了特別強調。
這是當天上午的最後一個演講。嘉賓是來自騰訊雲的佈道師、CVM技術負責人李力。聽說這是他第一次參加這樣的公開活動,也是第一次在外部介紹 Python 在騰訊雲的實踐。
騰訊是一家大量使用 C++ 的公司,講者當初也是做爲 C++ 程序員進入該公司的。2007 年,開始接觸了 Python,很快就將其認定爲一門能夠」帶你裝逼帶你飛「的語言。出於對 Python 在雲計算方面的信心,李力從 2012 年開始在騰訊雲推廣使用 Python。
推廣初期碰到了必定的阻力,這點對於任何想在公司推廣新技術的人來講都是沒法避免的。針對領導們的擔心,李力強調了在公有云中使用 Python 的諸多優點:
與 Linux 系統自然貼合,系統編程 API 與 glibcc 保持一致,之前的工具箱仍然適用。
是可以運行的僞代碼,開發效率獲得極大提高。
容易與 C/C++交互,使用 ctypes 能夠很方便地調用 C 代碼。
更容易保持項目的整潔。
基於這些考慮,騰訊雲開始慢慢嘗試引入 Python。首先就是改造接入層,使用 Flask + uWSGI + Nginx 改造了舊的 CGI 接口,使得開發工做更加簡單,接口更加現代化。
另外,騰訊雲還將 Python 用於系統編程,開發了公有云上的宿主機包管理工具。聽說這個工具上線幾年來運行都沒有出什麼問題。通常開發者不多有將 Python 用於系統編程的,騰訊雲之因此選擇 Python,是因爲其標準庫與 POSIX 規範自然貼合,具有優秀的文本處理和分析能力,並且還有完備的網絡功能等緣由。
接下來,他還介紹了雲調度系統的框架,並分享了在大規模系統中的應用 Python 技術的一些坑。
另外,總的來看,這場演講多是現場笑聲最多的一次。
聽 River 的分享以前,我覺得 QPython 只是一個讓我在安卓手機上練習寫 Python 代碼的 APP 而已。可是聽完以後,我以爲本身徹底想錯了。QPython 的野心是作一個生態。
一開始,River 經過一個利用 QPython 調用翻譯 API 的示例,演示了通常程序員的具體使用場景。接着他介紹了本身開發 QPython 的由來。
QPython 的團隊中目前只有兩我的左右,而擁有的國內外用戶已經達百萬。這一切都起源於 River 等人對 Android Studio 編譯速度的不滿。在 River 看來,並非全部的 APP 都須要原生的速度,不少時候開發速度更重要。
目前 QPython 正在逐步的開源當中,功能也比剛開始時豐富了許多。針對用戶反饋的手機上編碼不方便的問題,QPython 團隊推出了 qpy.io 服務(國外服務器,國內訪問受限)。經過該服務,用戶能夠在瀏覽器中在線編輯手機上的代碼,而後在手機上進行調試,並且支持在線導出 APK。
據介紹,QPython 目前支持多種 APP 開發庫,如 Bottle(內置)、Django、Flask 和 Kivy 等。同還能夠經過 QSL4A,讓開發者充分利用安卓手機的特性。
談到 QPython 的將來,River 表示很是有信心,將來將在國內創建服務,開放第三方庫提交,並開發 QScript 市場。
何世友是科技媒體愛範兒的 CTO。常常看愛範兒上的文章,只是沒想到愛範兒使用的語言也是 Python。這場開始的大概是下午兩點多的樣子。說實話那個時候你們都挺困的。何世友一上來,聽說就用了賴勇浩教的一招演講技巧,讓睡意濃濃的現場觀衆們起立爲他「鼓掌」了 5 秒鐘。
他的演講主題是「ASGI 草案,Python 終於等到了」。ASGI 的全稱是異步服務網關接口(Asynchronous Server Gateway Interface),是今年才由 Django 工做組提出的一個協議,目前還屬於草案階段。國內關注該協議的人很是少,幾乎沒有相關的中文介紹。
爲了說明 ASGI 的由來,他從 Tim Bernes Lee 1989 年發明萬維網開始,帶現場觀衆走過了從 CGI 到 WSGI 的十年發展歷程。一開始萬維網只能傳輸靜態文件,爲了知足編寫動態內容的需求,1993 年 CGI 由此誕生。可是使用 Python 編寫 CGI 的方式特別的繁瑣、低效,2003 年 Python 官方推出了 WSGI。該協議的推出,是爲了統一標準,提升效率。甚至有開發者說,」有了 WSGI 以後,寫 web 框架就像喝水同樣簡單。「
WSGI 提出之時,主流的網絡協議還只有 HTTP。可是 2011 年,WebSocket 標準完成。次年,HTTP2 協議敲定。現在,HTTP 2 協議和 WebSocket 協議的使用愈來愈普遍。微信小程序的網絡請求甚至規定了只能走 HTTP2 協議。所以,WSGI 協議確實到了須要更新的時候了。
在沒有 ASGI 的狀況下,目前使用 Python 來處理這三種協議,須要使用多個框架,項目複雜度增長。而 ASGI 的目標,就是在一個框架中直接處理三種協議請求。
ASGI 是基於 WSGI 的,是對後者的補充,由 protocol server、channel layer和 application 三層組成。若是 ASGI 協議最終普及,何世友認爲可以顯著提升開發效率,下降基礎代碼的遷移成本;可是同時也提示了須要注意的事項:
須要更強力的 interface server
須要特殊的 scaling 技巧
須要和 WSGI 和諧共處等。
Python 在運維方面的應用,多是最普遍的。這場的嘉賓張其川是自學 Python 的,本身還寫了一個自動化運維的開源項目——CheungSSH。
在他看來,大數據和雲計算時代,服務器的規模空前龐大,而人力成本則在不斷攀升,自動化成爲企業的必然需求。而選擇 Python 作自動化,理由很是直接:
簡單易學
使用簡單,代碼量少
開源,學習方便,開發速度更快
對於以上三點,相信其餘的 Python 愛好者都會認同。
他提出,自動化的目標就是省錢,不管使用的是什麼工具,puppet 仍是 ansible ,最終的標準都是能省多少錢。
若是你去看直播視頻的話,你會發現這也是一位挺有趣的嘉賓。
如今微信這麼火,又出了小程序這個原子彈,做爲 Python 程序員的咱們若是想作微信公衆號開發該怎麼辦?開源界其實有多個可選的框架,此次大會邀請到的是一個名叫 WEGO 的微信開發框架背後的團隊成員。
和其餘開源項目同樣,WEGO 項目的起源都是由於開發者怕麻煩。微信公衆號的開發,在胡國濤及其團隊看來是比較麻煩的,主要體如今接口繁多、文檔錯亂和報錯模糊。並且對於 Python 程序員來講,還得去學習 JS,麻煩的程度又高了不少。
WEGO 團隊對本身的框架仍是很是的自信,稱有清晰的接口、完整的文檔和詳細的報錯,並給出了具體的代碼進行說明。
談點筆者的我的觀點。目前 WEGO 項目在中文網絡上的介紹很是少,簡單的百度搜索幾乎找不到任何內容。只能從項目的 Github 項目地址瞭解。而其中列出的文檔,也並非那麼完整。若是想讓其餘 Python 開發者使用該框架的話,但願 WEGO 團隊再努力完善一下官方文檔。
效率是開發者不變的追求。這場分享來自有五年 Python 編程經驗的後端開發者饞師。他主要分享瞭如下三種利用 Python 提升工做效率的方式:
用Python開發比AutoHotkey更好用的熱鍵軟件,並同時支持Windows、Linux、Mac OS三種系統。
經過Monkey Patching實現運行時調用棧追蹤,用於快速研究代碼流程(10分鐘弄懂一個框架),及實現非侵入式流程測試(不用埋點,不用加測試專用的函數參數)。
使用逐行註釋法明示代碼書寫意圖,成倍提高代碼可讀性和項目維護效率。
具體狀況你們請看視頻。
如今互聯網行業對數據的重視程度愈來愈高,普通的業務工做人員獲取數據的需求也愈來愈大。針對這類需求,逐漸出現了許多作可視化爬蟲的公司,最突出的技術特色就是無需編碼,可視化配置。這場分享中,廣州一家大數據公司的技術經理分享了本身網絡爬蟲的框架,並介紹瞭如何解決構建可視化爬蟲時碰到的問題。
在技術棧的選擇上,咱們這裏只關注與爬蟲爬取和存儲直接相關的技術。該公司採用的是 Pyspider + PhantomJS 爬取頁面,而後將結果存儲在 mongoDB 和 redis 中。在數據庫的選擇上,講者在某臺機器上的結果顯示以下,MongoDB 和 Redis 配合採集的速率優點明顯。
分享者還探討了使用機器學習技術的可能,能夠用來計算兩個頁面的 HTML DOM 類似度,再經過多個類似頁面計算 URL 正則表達式,來構建判別器。
在本文中不方便詳細回顧具體的框架設計。若是你對設計爬蟲系統有興趣的話,推薦參考這裏分享的框架。
最後這名分享者給出了一套完整的大數據監控告警平臺產品方案,對於沒有接觸過數據監控系統設計的來講極其具備參考價值。
根據講者的分享,監控系統主要涉及數據採集集、數據存儲、數據可視化、數據警告等四大部分,同時要求系統作到高可用、高可伸縮和高併發。
最終的技術架構以下圖所示: