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