tornado--初學者常見問題總結

1:tornado如何實現在代碼修改後,不需要重啓,直接應用修改後的提交?

設置dubug=True即可

​
def make_app():
    return tornado.web.Application([
        (r"/", XXXHandler)
    ], debug=True)

​

2:tornado重啓後,顯示端口號被佔用(提示,通常每個套接字地址只允許使用一次);程序在編輯器中已經停止,但是接口依舊可以訪問?

編輯器中雖然已經把程序停掉了,但是後臺該python進程依然是存在的,可以去直接後臺進程管理器中關閉掉進程。

3:採用什麼數據庫orm框架?怎麼避免在操作數據庫的過程中出現同步的操作,降低性能?

採用peewee來實現。推薦理由:git社區很火,應用的人也很多,官方文檔很友好。最主要的是可以實現異步操作。

如:

     Comment.update(aggree_num=Comment.aggree_num+1).where(Comment.commentid == 1).execute()

     execute()和前面的語句是可以分離執行。前半部分實際上只是生成了需要運行的sql,但並未真正去執行, 基於這個 纔會實現基於peewee的異步操作。想更多瞭解可以查看tornado專輯的其他相關博客。

sqlalchemy中也有先生成sql然後,後執行的操作,但是個人更喜歡用peewee。

4:採用什麼樣的用戶認證?

結合自己項目需求,目前前後端分離項目json web token這種方式應用非常多。

重寫系統提供的裝飾器,實現一個驗證用戶的協程方式的裝飾器;修改當用戶不存在時 改狀態碼401 

(jwt和sessionid方式的優劣?那種更安全?)

5:RuntimeError: finish() called twice

  File "D:\Program\Envs\tornado_xingfu\lib\site-packages\tornado\web.py", line 1022, in finish
    raise RuntimeError("finish() called twice")
RuntimeError: finish() called twice

這是一個tornado非常基礎的問題, finish()之後 server端會主動關閉與client的鏈接, 但是默認情況下還會繼續執行後面的代碼,

比如我們可以放一些異步操作在這裏, 雖然我不會這麼做...

所以呢, 如果一個程序在if裏 調用了finish() 程序仍然會繼續執行到後面, 再次執行一次finish() 就會報這個錯,

正確的作法是在前面的finish()後面加一個return 這樣後面的代碼就不會繼續被執行了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章