[問題] flask中的threading

作者: mit958 (JerryTsai)   2016-08-11 11:34:34
請問各位大大
程式碼如下
@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會莫名的卡住 請問是發生什麼問題嗎
感謝!!!
作者: kenduest (小州)   2016-08-11 13:36:00
當初 app.run 時候有傳入 threaded=True 嗎?
作者: mit958 (JerryTsai)   2016-08-11 14:13:00
有試過 加進去反而會在request.json就卡住了補充 原本會卡在rec_sys 中 read csv的地方如果不用thread可以正常呼叫
作者: kenduest (小州)   2016-08-11 16:03:00
requests 應該是 blocking 的呼叫...你可能需要用 gevent 搭配解決這個問題看走眼,我還以為你有用 requests 存取網路,看起來沒
作者: mit958 (JerryTsai)   2016-08-11 16:34:00
結果改用linux multiprocessing的方式就可以了會是thread gil的問題嗎@@
作者: uranusjr (←這人是超級笨蛋)   2016-08-11 16:50:00
你上面的程式整個壞了
作者: Falldog (Yo)   2016-08-11 22:06:00
你有access到SQLite嗎 沒道理multiprocessing ok threadfail
作者: Raymond0710 (雷門)   2016-08-12 10:53:00
之前有遇過類似的 有其他thread太忙 導致要不到gil

Links booklink

Contact Us: admin [ a t ] ucptt.com