Python 资源整理4 SimpleAPI.异步获取请求数据

说明

异步和同步处理混在一起比较容易出问题,干脆将异步的数据获取作为一个单独的服务接口。

上次的例子进行一些改进,简化了脚手架部分的安装和拆除。

内容

1 基本IO

整个过程在jupyter中完成,首先建立一个空的文件夹,重命名。在文件夹下建立一个step1基本IO.ipynb,在这里执行文件资源的导入。

2 开发

开发以dev开头,和项目的entry_py.py处在同一个文件夹,这样导入包函数比较简单,完成后不必再移动。

3 启动服务测试

  • 1 查找镜像
  • 2 启动容器
  • 3 启动服务
docker run -it -p 20002:5555 -v YOURPATH:/opt 622d529d0fe7 bash

export ANDY_runenv="test"
python3 entry_py.py

4 开发主函数

通过func_dict会自动导入到funcs

  • 异步获取api数据
import aiohttp
import asyncio
import json
import time
async def fetchx(x,url_template):
    async with aiohttp.ClientSession() as session:
        async with session.get(url_template % x) as response:
            res = await response.text()
            
    return {x:json.loads(res)}

async def async_query_main(doc_id_list, url_template, loop):
    tasks = []
    res = []
    
    for doc_id in doc_id_list:
        tasks.append(asyncio.ensure_future(fetchx(doc_id,url_template ),loop=loop))
    await asyncio.wait(tasks)
    for task in tasks:
        res.append(task.result())
    return res 

# 在py文件中使用异步
def run_async_query(doc_id_list, query_template):
    start = time.time()
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(async_query_main(doc_id_list, query_template, loop))
    loop.close()
    print('Async Query Run Spending : {} s'.format(time.time() - start))
    return res

5 修改视图函数

entry_py.py的api函数

    res_dict = {}
    
    input_dict = request.get_json()
    
    # 获取到的文档id列表
    doc_id_list = input_dict['doc_id_list']
    query_template = input_dict['query_template']
    
    '''
    Processing
    '''

    try:
        res = fs.run_async_query(doc_id_list,query_template )
        res_dict['status'] = True
        res_dict['msg'] = 'ok'
        res_dict['data'] = res
    except:
        res_dict['status'] = False 
        res_dict['msg'] = '获取任务失败'
        res_dict['data'] = None

6 打包下载,解压上传

fs.zip_a_folder3('./SimpleAPI_v1', './SimpleAPI_v1_open_asyncget.zip',filter_file_list=['dev1.ipynb', 'dev2.ipynb'],fs=fs )

# 这个命令保存在sh_ 中
rsync -rvltz  --progress "-e ssh -p xxxx" PATH/SimpleAPI_v1_open_asyncget/ user@IP:/opt/simaple_api_asyncget

7 在目标主机使用命令启动

如果没有镜像先执行拉取

调试状态,挂载文件夹并映射端口

docker run -it -p 20002:5555 -v /opt/simaple_api_asyncget:/opt 622d529d0fe7 bash

服务状态,设置开机重启,语言项(不然中文会有问题)

docker run -idt --restart=always -e "LANG=C.UTF-8"   -p 20002:5555 -v /opt/simaple_api_asyncget:/opt 622d529d0fe7 sh -c "cd /opt && sh entry_sh.sh test"

8 测试内外网的连通性

内网

在这里插入图片描述

外网

只是测试一下。如果直接部署在公网服务器,打开端口就可以。如果是局域网机,还要做一下frp映射。

resp = req.post( 'http://DOMAIN:20002/api/', json=data)
print(resp.text)
  • 1 m4git
  • 2 在machine_config 下checkout分支
  • 3 修改完frpc.ini 推送
  • 4 在目标主机拉取
  • 5 更新frpc.ini并重启
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值