前言

第一次参与实习工作,S小白中完成的第一项项目任务,简要整理一下:


一、任务需求

任务目标:实现算法与后端联调,配置接口。

md文档展示接口需求:

接口项目架构_数据


接口解释为:后端传入数据给模型,模型生成所需结果。

接口接收的数据如json格式一所示,接口返回数据为json格式二所示。

接口项目架构_json格式_02


接口解释为:依据接口一给出的结果,后端传入数据给模型,模型返回所需结果。

接口接收的数据如json格式一所示,接口返回数据为json格式二所示。

二、实现过程

1.代码过程

Flask启动:

from flask import Flask
from werkzeug.middleware.proxy_fix import ProxyFix
from view_link import api

app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
#app_config.py文档中要配置HOST(地址)、PORT(端口)
app.config.from_pyfile('config/app_config.py')
api.init_app(app)
app.run(host=app.config['HOST'], port=app.config['PORT'], debug=app.config['DEBUG'], threaded=False, use_reloader=False)

接口1:

@api.route('/gen_smi_qa', )
class genQA(Resource):
    @api.doc('生成相似问句')
    def post(self):
        logger.debug('Process {} - Thread {}'.format(os.getpid(), threading.current_thread().ident))
        logger.info('\n前台传参:{}'.format(api.payload))
        try:
            request_data = api.payload
            qaList = request_data['qaList']
            qaId = []
            question = []
            for item in qaList:
                qaId.append(item["qaId"])
                question.append(item["question"])
            num = request_data['num']
            # 未添加线程
            similarQuestions = ''
            batchId = smi_qa_gen.create_sim_record(qaId, question, num, similarQuestions)
            # smi_qa_gen.gen_smi_query(batchId, question, num)

            # 添加线程(尝试很多方法,其他失败)
            **pool.run(smi_qa_gen.gen_smi_query, (batchId, question, num,))**
            # pool.run(smi_qa_gen.gen_smi_query,args = (batchId, question, num))
            # threading.Thread(target=smi_qa_gen.gen_smi_query, args=(batchId, question, num,))

            # batchId = smi_qa_gen.create_batchId()
            # threads = [threading.Thread(target=smi_qa_gen.create_sim_record,args=(batchId,qaId,question,num,similarQuestions,)),
            #            threading.Thread(target=smi_qa_gen.gen_smi_query,args=(batchId, question, num,))]
            # for t in threads:
            #     t.start()

            # 返回状态码及batchId
            return {
                'retCode': 0,
                'data': {
                    'batchId': batchId
                }
            }
        except Exception as e:
            exception_id = str(uuid.uuid1())
            logger.error('exceptionId:{}\tmessage:{}'.format(exception_id, traceback.format_exc()))
            return {
                       'retCode': 999999,
                       'message': str(e),
                       'exceptionId': exception_id
                   }, 500

接下来一整个方法套用方法的过程:

难点:多线程实现

接口项目架构_数据_03


接口项目架构_数据_04


接口项目架构_数据_05


接口项目架构_多线程_06

接口2:

@api.route('/get_smi_qa', )
class simQA(Resource):
    @api.doc('查询状态并获取相似问句')
    # @api.expect(text_field)
    def post(self):
        logger.debug('Process {} - Thread {}'.format(os.getpid(), threading.current_thread().ident))
        logger.info('\n前台传参:{}'.format(api.payload))
        try:
            request_data = api.payload
            batchId = request_data['batchId']

            # 定义方法检测生成状态
            record = smi_qa_gen.gen_smi_status(batchId)
            if not record:
                return {
                    'retCode': 0,
                    'data': {
                        'status': 999
                    }
                }
            # 模型存在且在生成状态
            status = record['genStatus']
            if status == 0:
                return {
                    'retCode': 0,
                    'data': {
                        "status": status,
                        "result": []
                    }
                }
            elif status == 1:
                similarQuestions, question, qaId = smi_qa_gen.get_smi_query(batchId)
                print(similarQuestions, question, qaId)
                result_list = []
                for index in range(len(question)):
                    dict_single = {}
                    dict_single["qaId"] = qaId[index]
                    dict_single["question"] = question[index]
                    dict_single["similarQuestions"] = similarQuestions[index]
                    result_list.append(dict_single)
                return {
                    'retCode': 0,
                    'data': {
                        "status": status,
                        "result": result_list
                    }
                }
            else:
                return {
                    'retCode': 0,
                    'data': {
                        "status": -1,
                        "result"

接口2难点在于返回任务状态

接口项目架构_postman_07


接口项目架构_数据_08

2.思路

做法体会:

1)第一次见md文档需求,看不懂。需要先理解md文档需求,明确输入输出内容;
2)json与数组与列表转换,很头大。没办法代码基础差,硬着头皮一个一个搜,一个一个试喽;
3)多线程这种真是第一次接触,以往只停留于理解概念,提问:线程与进程的区别?慢慢搜不着急,是调包的过程;
4)实际在写过程中,每次转换一次格式就开始print,可能过程是繁杂的,但是每次print让自己思路更加清晰。

# 总结
稳住心态慢慢写嘛,我基本是比着葫芦画瓢的过程,但是完成的那一刻还是蛮有成就感的,S小白加油!