作者mit958 (JerryTsai)
看板Python
標題[問題] flask中的threading
時間Thu Aug 11 11:34:34 2016
請問各位大大
程式碼如下
@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://webptt.com/m.aspx?n=bbs/Python/M.1470886476.A.262.html
※ 編輯: mit958 (122.146.87.216), 08/11/2016 11:53:08
1F:→ kenduest: 當初 app.run 時候有傳入 threaded=True 嗎?08/11 13:36
2F:→ mit958: 有試過 加進去反而會在request.json就卡住了08/11 14:13
3F:→ mit958: 補充 原本會卡在rec_sys 中 read csv的地方08/11 14:14
4F:→ mit958: 如果不用thread可以正常呼叫08/11 14:23
※ 編輯: mit958 (110.26.27.187), 08/11/2016 14:26:10
5F:→ kenduest: requests 應該是 blocking 的呼叫...08/11 16:03
6F:→ kenduest: 你可能需要用 gevent 搭配解決這個問題08/11 16:03
7F:→ kenduest: 看走眼,我還以為你有用 requests 存取網路,看起來沒08/11 16:04
8F:→ mit958: 結果改用linux multiprocessing的方式就可以了08/11 16:34
9F:→ mit958: 會是thread gil的問題嗎@@08/11 16:35
10F:→ uranusjr: 你上面的程式整個壞了08/11 16:50
※ 編輯: 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
11F:推 Falldog: 你有access到SQLite嗎 沒道理multiprocessing ok thread 08/11 22:06
12F:→ Falldog: fail 08/11 22:06
13F:推 Raymond0710: 之前有遇過類似的 有其他thread太忙 導致要不到gil 08/12 10:53