部署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演算法複雜一點,但...