python sanic部署 Sanic 部署

2021-10-11 12:59:45 字數 1745 閱讀 3424

部署sanic的方法有很多種,可以通過內建的 webserver,也可以通過gunicorn等。

內建webserver

定義sanic.sanic例項後,我們可以使用下面的關鍵字引數呼叫run方法:

port(預設為8000): 伺服器監聽的埠;

debug(預設為false):是否開啟除錯模式(會讓伺服器變慢);

ssl(預設為none):開啟 ssl 加密;

sock(預設為none): 伺服器可以介紹來自該 socket 的連線;

workers(預設為1): 需要建立的工作程序的個數;

loop(預設為none):乙個asyncio相容的事件迴圈。如果為none,sanic則建立自己的事件迴圈;

protocol(預設為httpprotocol):asyncio.protocol的子類;

access_log(預設為true):開啟請求處理的日誌(顯著降低server速度)。

工作程序(wrokers)

預設情況下,sanic僅使用乙個cpu核心在主程序中進行偵聽。 為了提高效能,只需指定執行引數中的工作器數量。

sanic將自動啟動多個程序並在它們之間路由流量。 我們建議使用與可用核心數相同的工作程序數。

通過命令列執行

if __name__ == '__main__':

通過gunicorn執行

gunicorn(green unicorn)是用於unix的wsgi http伺服器。它是從ruby 的unicorn專案移植過來的。

為了使用gunicorn執行sanic應用程式,我們需要使用sanic.worker.gunicornworker作為gunicorn的work-class引數:

如果你的應用程式受盡了記憶體洩漏之苦,可以配置gunicorn在它處理完給定數量的請求後自動重啟工作程序。這是限制記憶體洩漏影響的比較方便的方式。

執行在方向**後面

sanic可以和反向**(比如,nginx)一起使用。下面是nginx的簡單配置:

server {

listen 80;

server_name example.org;

location / {

proxy_pass

proxy_set_header host $host;

proxy_set_header x-real-ip $remote_addr;

proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;

禁止除錯日誌

為了提高效能,在run引數中新增debug=false和access_log=false。

通過 gunicorn 執行可以設定環境變數sanic_access_log="false":

env sanic_access_log="false" \

--worker-class sanic.worker.gunicornworker \

--log-level warning

非同步支援

這種方式適合於我們需要和其它應用程式分享sanic程序,尤其是loop事件迴圈。然而這種方式不支援多程序,並且通常不是執行sanic應用程式的首選方法。

下面是乙個不完全的例子(請檢視源**/examples/run_async.py):

loop = asyncio.get_event_loop()

task = asyncio.ensure_future(server)

loop.run_forever()

SA 字尾陣列

首先一定要確定sa 是個什麼東西 sa i 表示的是排名為 i 的字尾是哪乙個 至於字尾 i的排名是多少,那個是ra nk i 當然啦 最最最難懂的就是基數排序 要是不用基數排序,每次對於乙個二元組直接so rt一下 這樣的複雜度是o nlog 2 對於二元組的基數排序應該是這樣做的 首先把所有元素...

字尾陣列SA

給定乙個字串s,按字典序排序s的所有子串 鬼知道什麼思想,好像沒有什麼思想。哦,想起來了,是倍增。考慮最簡單的字尾間o n o n 比較和快排o nlog n o n logn 總複雜度o n2lo gn o n 2log n 考慮優化字串間的比較,用倍增的思想,假設k 2 k 2 長度的已經比完了...

字尾陣列SA

原理 其本質就是把字串的所有字尾進行排序。用普通排序需要o nlogn 但是字串比較和數字比較不同,所以實際需要o n nlogn 為了讓這個過程快一點,所以有了倍增演算法,o nlogn 和dc3演算法,o n 倍增演算法比較簡單,也比較好寫,具體可以參考這個大佬的部落格。dc3演算法複雜一點,但...