[問題] flask中的threading

看板Python作者 (JerryTsai)時間9年前 (2016/08/11 11:34), 9年前編輯推噓2(2011)
留言13則, 5人參與, 最新討論串1/1
請問各位大大 程式碼如下 @app.route('/recommend', methods=['POST']) def rec(): log.debug("Get request") id = int(request.json['ID']) sourse_db = int(request.json['Source_DB']) target_db = int(request.json['Target_DB']) try: if not id: abort(400) except: raise threading.Thread(target=rec_sys, args=(id,sourse_db,target_db)).start() return status 我想在收到一個post之後 先return status 邊在rec_sys做一系列的pull db,text process 但是這個threading會莫名的卡住 請問是發生什麼問題嗎 感謝!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.146.87.216 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1470886476.A.262.html ※ 編輯: mit958 (122.146.87.216), 08/11/2016 11:53:08

08/11 13:36, , 1F
當初 app.run 時候有傳入 threaded=True 嗎?
08/11 13:36, 1F

08/11 14:13, , 2F
有試過 加進去反而會在request.json就卡住了
08/11 14:13, 2F

08/11 14:14, , 3F
補充 原本會卡在rec_sys 中 read csv的地方
08/11 14:14, 3F

08/11 14:23, , 4F
如果不用thread可以正常呼叫
08/11 14:23, 4F
※ 編輯: mit958 (110.26.27.187), 08/11/2016 14:26:10

08/11 16:03, , 5F
requests 應該是 blocking 的呼叫...
08/11 16:03, 5F

08/11 16:03, , 6F
你可能需要用 gevent 搭配解決這個問題
08/11 16:03, 6F

08/11 16:04, , 7F
看走眼,我還以為你有用 requests 存取網路,看起來沒
08/11 16:04, 7F

08/11 16:34, , 8F
結果改用linux multiprocessing的方式就可以了
08/11 16:34, 8F

08/11 16:35, , 9F
會是thread gil的問題嗎@@
08/11 16:35, 9F

08/11 16:50, , 10F
你上面的程式整個壞了
08/11 16:50, 10F
※ 編輯: mit958 (27.242.64.163), 08/11/2016 16:55:27 ※ 編輯: mit958 (27.242.64.163), 08/11/2016 16:55:27 ※ 編輯: mit958 (27.242.64.163), 08/11/2016 16:57:21

08/11 22:06, , 11F
你有access到SQLite嗎 沒道理multiprocessing ok thread
08/11 22:06, 11F

08/11 22:06, , 12F
fail
08/11 22:06, 12F

08/12 10:53, , 13F
之前有遇過類似的 有其他thread太忙 導致要不到gil
08/12 10:53, 13F
文章代碼(AID): #1Ng_9C9Y (Python)