1. Zappa
鏈接:https://www.zappa.io/
自 AWS Lambda(以及后續(xù)的其它項目)發(fā)布以來,人們的關注點就全部轉移到了無服務器架構上。這些架構讓我們可以將微服務(microservice)部署到云端、部署到一個完全可管理的環(huán)境中;在這樣的環(huán)境中,人們不用關心管任何服務器,而只需要分配無狀態(tài)的腰池、短暫的計算容器(computing container)即可——一個服務提供商即可完全管理。通過這一范式,事件(比如流量尖峰)可以觸發(fā)更多這些容器的執(zhí)行,因此有可能能夠處理「無限的」水平擴展忙芒。
Zappa 是一個用于 Python 的無服務器框架,盡管(至少目前)它僅支持 AWS Lambda 和 AWS API Gateway示弓。它使得開發(fā)這樣架構的應用變得非常簡單,能將你從使用 AWS Console 或 API 的繁瑣配置工作中解放出來,而且它還有各種用于簡化部署和管理不同環(huán)境的命令。
2. Sanic + uvloop
鏈接:
Sanic: https://github.com/channelcat/sanic
uvloop: https://magic.io/blog/uvloop-blazing-fast-python-networking/
誰說 Python 不能很快?Sanic 不僅有可能是有史以來最好的軟件庫名字,也可能是有史以來最快的 Python 網(wǎng)頁框架,而且似乎也遠遠超過其它框架呵萨。它是一個專為速度而設計的類 Flask 的 Python 3.5+ 網(wǎng)頁服務器奏属。另一個庫 uvloop 是一個用于 asyncio 的事件循環(huán)(event loop,其底層使用了 libuv)的超快速的插件替代。這兩個加起來就是一個強大的組合!
根據(jù) Sanic 的作者的基準測試,uvloop 可以驅動 Sanic 每秒處理超過 3.3 萬條請求,這實在太強了!(比 node.js 還快)潮峦。你的代碼可以受益于這種新的 async/await 語法——它們會看起來很整潔;此外我們也喜歡 Flask 風格的 API囱皿。你一定要試試 Sanic,而且如果你也在使用 asyncio,你也可以無需太多修改你的代碼就能受益于 uvloop。
3. asyncpg
鏈接:https://github.com/MagicStack/asyncpg
跟進 asyncio 框架的最新進展,來自 MagicStack 的人為我們帶來了這個高效的異步(目前只支持 CPython 3.5)數(shù)據(jù)庫接口庫,其是專門為 PostgreSQL 設計的忱嘹。它有零相關性,這意味不需要安裝 libpq嘱腥。相對而言,withpsycopg2(最流行的 Python 的 PostgreSQL 適配器)需要以文本格式與數(shù)據(jù)庫服務器交換數(shù)據(jù);而 asyncpg 則實現(xiàn)了 PostgreSQL 二進制 I/O 協(xié)議,這讓其不僅支持通用類型,而且還有其它許多性能上的好處。
其基準是很清楚的:asyncpg 平均至少比 psycopg2(或 aiopg)快 3 倍,也比 node.js 和 Go 實現(xiàn)更快拘悦。
4. boto3
鏈接:https://github.com/boto/boto3
如果你的基礎設施部署在 AWS 上或使用了它們的服務(比如 S3),那么你應該非常樂意看到 boto(用于 AWS API 的 Python 接口)被從頭到尾完整重寫了齿兔。而且你不用一次性就完全遷移你的應用:你可以同時使用 boto3 和 boto(2) ;比如僅在你應用中新的部分使用 boto3。
這個新的實現(xiàn)在不同的服務間會一致的多,而且因為其使用了數(shù)據(jù)驅動的方法來在運行時間(runtime)從 JSON 描述文件中生成類,所以其總是可以實現(xiàn)快速更新础米。再也不用滯后于新的 Amazon API 功能了,趕緊使用 bot3 吧!
5.TensorFlow
鏈接:https://www.tensorflow.org/
大名鼎鼎的 TensorFlow分苇。自從谷歌在 2015 年 11 月發(fā)布以來,這個庫已經(jīng)獲得了很多改進,它已成為時下最流行的 GitHub Python 庫。簡而言之,TensorFlow 是一個使用數(shù)據(jù)流圖(data flow graphs)的數(shù)值計算庫,可以在 GPU 或 CPU 上運行屁桑。
在過去一年里,我們目睹了 TensorFlow 在機器學習社區(qū)中掀起了一股新風潮(特別是在深度學習領域),它不僅出現(xiàn)在研究領域,而且在應用領域也非常常見医寿。如果你正在做深度學習并想在高級別接口中使用它,你可以嘗試以它為后端的 Keras 或新推出的 TensorFlow-Slim。
6.gym+universe
Gym:https://gym.openai.com/
Universe:https://universe.openai.com/
如果你是人工智能圈內的人,肯定聽說過非營利人工智能研究公司 OpenAI蘑斧。他們的研究人員在今年開源了一些 Python 代碼靖秩。Gym 是一個用于開發(fā)并比較強化學習算法的工具包艾帐。它包含一個開源庫,這個庫收集了一些可被用于測試強化學習算法的測試問題(環(huán)境)。它還包含一個站點與 API,能讓你對比訓練出的算法(代理,agent)的表現(xiàn)盆偿。因為它不在乎代理的實現(xiàn)方式,你可以選擇使用自己的計算庫建立代理:numpy柒爸、TensorFlow、Theano 等事扭。
他們最近也發(fā)布了 Universe,這是一個用于研究通用人工智能在跨游戲捎稚、網(wǎng)頁和其他應用上的表現(xiàn)的軟件平臺。Universe 能完美匹配 gym,因此它能讓任何真實世界應用調整進 gym 環(huán)境中求橄。研究人員希望這一無限的可能性能夠加速對智能代理的研究,從而解決通用任務今野。
7.Bokeh
鏈接:http://bokeh.pydata.org/
你可能熟知一些提供數(shù)據(jù)可視化的 Python 庫,其中最流行的就是 matplotlib 和 seaborn。然而,Bokeh 被創(chuàng)造用來做交互可視化(interactive visualization),并且面向現(xiàn)代的網(wǎng)頁瀏覽展示罐农。這意味著 Bokeh 能創(chuàng)造出一個可以讓你探索來自網(wǎng)頁瀏覽器數(shù)據(jù)的情節(jié)(plot)条霜。比較棒的是它緊密融合了 Juptyer Notebooks,所以你能使用它配合你的專業(yè)工具進行研究。它也有一個可選的服務器組件 bokeh-server,其帶有許多強大的功能,比如在服務器端對大型數(shù)據(jù)集進行下采樣涵亏、流傳輸數(shù)據(jù)宰睡、變換等∑睿可點擊網(wǎng)址 http://bokeh.pydata.org/en/latest/docs/gallery.html 查看案例,看起來很棒拆内。
8.Blaze
鏈接:https://blaze.readthedocs.io/en/latest/index.html
有時候,當你對數(shù)據(jù)集運行分析時,卻發(fā)現(xiàn)數(shù)據(jù)集過大,無法一次塞進計算機 RAM 中。如果你無法依賴 numpy 或 Pandas,你通常需要轉而使用其他的工具,如 PostgreSQL宠默、MongoDB麸恍、Hadoop、Spark 等等搀矫。這些工具都有其自身的優(yōu)缺點,依照任務的特點,總有一種工具是適合你的抹沪。但決定轉換工具是一項巨大的工程,因為你需要了解這些系統(tǒng)如何工作,以及如何以正確的形式插入數(shù)據(jù)。
Blaze 提供了一個統(tǒng)一的接口,讓用戶無需學習所有數(shù)據(jù)庫技術瓤球。Blaze 庫的核心是一種計算表達方式融欧。Blaze 本身不會進行任何計算:它只是知道如何指定一個特定的后端,決定誰來執(zhí)行任務。Blaze 還有其它很多功能(它形成了一個生態(tài)系統(tǒng)),它作為一個庫被開發(fā)出來冰垄。例如,Dask 實現(xiàn)了一個可用于 NumPy 數(shù)組的插件,可以處理大于內存的內容和利用多核處理器,并且還具有動態(tài)任務調度能力蹬癌。
9.Arrow
鏈接:https://github.com/crsmithdev/arrow
有一個流行的說法,在計算機科學領域只有兩個大問題:無效緩存和命名。我認為這句話忽略了另一個大問題:管理數(shù)據(jù)時間(managing datetimes)虹茶。如果你曾經(jīng)試圖在 Python 中管理數(shù)據(jù)時間,你就會知道標準庫里有巨量的模塊和類型:datetime逝薪、date、 calendar蝴罪、 tzinfo董济、 timedelta、 relativedelta要门、 pytz 等等虏肾。更糟糕的是,時區(qū)都自然設定為默認值廓啊。
Arrow 為開發(fā)者提供了「人類的時間(datetime for humans)」,提供了一種清晰的方法來創(chuàng)建、操作封豪、格式化和轉換日期谴轮、時間和時間戳。它可以用于替換 Python 2 和 3 的 datetime 類型,并提供了一個更友好的界面,同時加入新的功能(如 humanize)彌補了原系統(tǒng)的不足吹埠。即使你不需要 Arrow 提供的額外功能,使用它也可以大大減少代碼中的引用第步。
10. Hug
鏈接:http://www.hug.rest/
公開你的內部 API,這樣可以大大簡化 Python API 的開發(fā)過程。Hug 是一個僅限于 Python3 的庫,提供在 Python 中創(chuàng)建 HTTP REST API 的最簡單的方式缘琅。它不是一個 web 框架(雖然 Hug 提供這樣的功能,而且表現(xiàn)很好),它的主要功能是公開正確的標準內部 Python API粘都。這個想法非常簡單:一次定義邏輯和結構,并且可以通過多種方式公開你的 API。目前,它支持公開 REST API 或命令行界面刷袍。
你可以使用類型注釋(type annotations),讓 Hug 不僅為你的 API 生成文件,同時提供驗證和明確的錯誤消息,這可以讓你的開發(fā)工作(和你的 API 用戶的工作)變得輕松很多翩隧。Hug 構建在 Falcon 的高性能 HTTP 庫之上,這意味著你可以使用任何 wsgi 兼容的服務器(例如 gunicorn)將其部署到生產環(huán)境中。