• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

第一次写项目接口

武飞扬头像
refuel_SonEtsu
帮助1

前言

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


一、任务需求

任务目标:实现算法与后端联调,配置接口。
md文档展示接口需求:
学新通
接口解释为:后端传入数据给模型,模型生成所需结果。
接口接收的数据如json格式一所示,接口返回数据为json格式二所示。
学新通
接口解释为:依据接口一给出的结果,后端传入数据给模型,模型返回所需结果。
接口接收的数据如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

学新通

接下来一整个方法套用方法的过程:
难点:多线程实现
学新通
学新通
学新通
学新通

接口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难点在于返回任务状态
学新通
学新通

2.思路

做法体会:

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

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfhkjh
系列文章
更多 icon
同类精品
更多 icon
继续加载