如何使用flask將模型部署為服務(wù)
1. 加載保存好的模型
為了方便起見(jiàn),這里我們就使用簡(jiǎn)單的分詞模型,相關(guān)代碼如下:model.py
import jieba class JiebaModel: def load_model(self): self.jieba_model = jieba.lcut def generate_result(self, text): return self.jieba_model(text, cut_all=False)
說(shuō)明:在load_model方法中加載保存好的模型,無(wú)論是sklearn、tensorflow還是pytorch的都可以在里面完成。在generate_result方法中定義處理輸入后得到輸出的邏輯,并返回結(jié)果。
2. 使用flask起服務(wù)
代碼如下:test_flask.py
# -*-coding:utf-8-*- from flask import Flask, request, Response, abort from flask_cors import CORS # from ast import literal_eval import time import sys import json import traceback from model import JiebaModel app = Flask(__name__) CORS(app) # 允許所有路由上所有域使用CORS @app.route("/", methods=['POST', 'GET']) def inedx(): return '分詞程序正在運(yùn)行中' @app.route("/split_words", methods=['POST', 'GET']) def get_result(): if request.method == 'POST': text = request.data.decode("utf-8") else: text = request.args['text'] try: start = time.time() print("用戶輸入",text) res = jiebaModel.generate_result(text) end = time.time() print('分詞耗時(shí):', end-start) print('分詞結(jié)果:', res) result = {'code':'200','msg':'響應(yīng)成功','data':res} except Exception as e: print(e) result_error = {'errcode': -1} result = json.dumps(result_error, indent=4, ensure_ascii=False) # 這里用于捕獲更詳細(xì)的異常信息 exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) # 提前退出請(qǐng)求 abort(Response("Failed!\n" + '\n\r\n'.join('' + line for line in lines))) return Response(str(result), mimetype='application/json') if __name__ == "__main__": jiebaModel = JiebaModel() jiebaModel.load_model() app.run(host='0.0.0.0', port=1314, threaded=False)
說(shuō)明:我們定義了一個(gè)get_result()函數(shù),對(duì)應(yīng)的請(qǐng)求是ip:port/split_words。 首先我們根據(jù)請(qǐng)求是get請(qǐng)求還是post請(qǐng)求獲取數(shù)據(jù),然后使用模型根據(jù)輸入數(shù)據(jù)得到輸出結(jié)果,并返回響應(yīng)給請(qǐng)求。如果遇到異常,則進(jìn)行相應(yīng)的處理后并返回。在__main__中,我們引入了model.py的JiebaModel類(lèi),然后加載了模型,并在get_result()中調(diào)用。
3. 發(fā)送請(qǐng)求并得到結(jié)果
代碼如下:test_request.py
import requests def get_split_word_result(text): res = requests.post('http://{}:{}/split_words'.format('本機(jī)ip', 1314), data=str(text).encode('utf-8')) print(res.text) get_split_word_result("我愛(ài)北京天安門(mén)")
說(shuō)明:通過(guò)requests發(fā)送post請(qǐng)求,請(qǐng)求數(shù)據(jù)編碼成utf-8的格式,最后得到響應(yīng),并利用.text得到結(jié)果。
4. 效果呈現(xiàn)
(1)運(yùn)行test_flask.py
(2)運(yùn)行test_request.py
并在起服務(wù)的位置看到:
以上就是如何使用flask將模型部署為服務(wù)的詳細(xì)內(nèi)容,更多關(guān)于用flask將模型部署為服務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python檢測(cè)數(shù)據(jù)類(lèi)型的方法總結(jié)
在本篇文章里小編給大家整理了關(guān)于Python檢測(cè)數(shù)據(jù)類(lèi)型的方法和相關(guān)實(shí)例代碼,需要的朋友們跟著學(xué)習(xí)下。2019-05-05Python提取Linux內(nèi)核源代碼的目錄結(jié)構(gòu)實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇Python提取Linux內(nèi)核源代碼的目錄結(jié)構(gòu)實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06python連接、操作mongodb數(shù)據(jù)庫(kù)的方法實(shí)例詳解
這篇文章主要介紹了python連接、操作mongodb數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python針對(duì)MongoDB數(shù)據(jù)庫(kù)的連接、查詢、排序等相關(guān)操作技巧,需要的朋友可以參考下2019-09-09如何解決Selenium包安裝成功卻無(wú)法導(dǎo)入的問(wèn)題
這篇文章主要介紹了如何解決Selenium包安裝成功卻無(wú)法導(dǎo)入的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08用python寫(xiě)一個(gè)windows下的定時(shí)關(guān)機(jī)腳本(推薦)
由于本人經(jīng)常使用筆記本共享WiFi,但是又不想筆記本開(kāi)機(jī)一夜,每次都是使用dos命令關(guān)機(jī),感覺(jué)好麻煩,然后小編想到用python寫(xiě)一個(gè)定時(shí)關(guān)機(jī)的腳本,具體實(shí)例代碼請(qǐng)參考本文2017-03-03Python urllib模塊urlopen()與urlretrieve()詳解
Python urllib模塊urlopen()與urlretrieve()的使用方法詳解。2013-11-11使用Python進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)可視化的多種方法與技巧
可視化是理解和解釋大量數(shù)據(jù)的強(qiáng)大工具之一,而Python作為一種流行的編程語(yǔ)言,提供了豐富的庫(kù)和工具來(lái)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)可視化,本文將介紹一些使用Python進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)可視化的方法與技巧,并提供相應(yīng)的代碼實(shí)例,需要的朋友可以參考下2024-05-05