讓你的Python(Web應用)飛起來,(異步/協程)全家桶

NO IMAGE

一、前言

Python語言近年來人氣爆棚。它廣泛應用於網絡開發運營,數據科學,網絡開發,以及網絡安全問題中。

然而,Python在速度上完全沒有優勢可言。

在速度上,Java如何同C,C++,C#或者Python相比較?答案幾乎完全取決於要運行的應用。在這個問題上,沒有完美的評判標準,然而The Computer Language Benchmarks Game 是一個不錯的方法。

我想要回答這樣一個問題:當運行同一個程序時,為什麼Python會 比其他語言慢2到10倍?為什麼我們無法將它變得更快?

以下是最主要的原因:

  • “它是GIL(Global Interpreter Lock全局解釋器鎖)”
  • “它是解釋型語言而非編譯語言”
  • “它是動態類型語言”

今天,我們不糾結以上哪種原因對性能影響最大,而是來談談當下Python3.7中,我們有怎樣的方法讓他變得比想象中的快,而且快很多

二、開始探索

Python在3.5版本中引入了關於協程的語法糖async和await,這意味著我們可以使用協程的方式來編寫Python應用程序,這會讓我們的Python代碼像Node一樣,讓他變成異步方式運行

當然,這並不是我們今天的目標

三、進入正題

在眾多的Web框架中,Django、Tornado、Flask已經相對成熟,Tornado等框架也可以進行異步方式的選擇,但今天我們都不講

我們要講的是當下比較強悍的 Sanic

為什麼要講Sanic,我想最主要的的原因是他足夠快,而且可以進行快速構建,他寫起來類似Flask,口說無憑,看圖

這是官方提供的 基準測試結果

讓你的Python(Web應用)飛起來,(異步/協程)全家桶

Sanic的開發者說他們的靈感來自於這篇文章 uvloop: Blazing fast Python networking

這是在我使用兩年來的感受

  • 快(爽)到起飛

  • 構建速度快

  • 原生支持 async/await 語法

  • 社區慢慢活躍,相比之前的不成熟慢慢出現一些優秀的插件

  • 自動分配&管理進程

讓你的Python(Web應用)飛起來,(異步/協程)全家桶

只是簡單說一下感受,今天的目的不是為了教大家如何使用Sanic,而是希望更多的人加入Sanic,體驗到Sanic以及更多優秀的框架的出現帶給我們的便捷

附上Sanic 官方文檔

三、進階

說了這麼多,還有一個問題,我的Web使用了協程,那麼意味著我在操作數據庫時,使用常規的pymysql以及psycopg2會阻塞我們的線程,我們的Web服務再快,卡在數據庫也是徒勞,那麼接下來為大家帶來一些我常用的協程支持庫

  • Postgresql: asyncpg
  • Redis: aioredis
  • I/O Framework:uvloop

這是我平時用的比較多的一些庫,個人喜好pg,至於mysql等其他數據庫,大家可以自行搜索

Sanic問世以來,我已經利用它構建過大大小小的Web應用程序,包括他日益完善的社區以及各方面的支持,例如sanic_session等庫的出現,讓他不再顯得那麼吃力,讓他不再面對大型生產環境而無能為力,到目前為止我一直在熱衷於探索他的小插件,如果你們有更好的Sanic支持,請留言

四、擦屁股

我會抽時間將Sanic以及全家桶的教程更新在下方,如果懶,懶,懶的看官方文檔,就等我(大哥)更新吧!

相關文章

在做移動端開發的時候,一些應該知道的知識

摸索小數轉為二進制的機制,探討為什麼js計算的小數有個尾巴

在微信小程序中使用阿里OSS(alioss)接口上傳圖片至阿里雲對象存儲(OSS)

Python讓你的Web應用程飛起來全家桶之Sanic