作者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/cn.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