FastAPI 使用记录

这篇具有很好参考价值的文章主要介绍了FastAPI 使用记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

import random
import logging
 


def get_logger(log_file):
    # 日志记录器
    logger = logging.getLogger()
    
    # 设置日志级别,只有大于等于这个级别的日志才能输出
    logger.setLevel(logging.INFO)
    
    # 设置日志格式
    formatter = logging.Formatter(
        "%(asctime)s - %(module)s - %(funcName)s - line:%(lineno)d - %(levelname)s - %(message)s"
    )
    
    # 输出到控制台
    to_console = logging.StreamHandler()
    to_console.setFormatter(formatter)
    logger.addHandler(to_console)

    # 输出到文件中
    to_file = logging.FileHandler(filename=log_file)
    to_file.setFormatter(formatter)
    logger.addHandler(to_file)
    return logger


CONFIG = {"a": random.randint(1, 100), "b": random.randint(1, 100)}

core/worker.py

fast_api.py

import os
import time
import json
import random
import datetime
from multiprocessing import Process
from fastapi import FastAPI
import uuid

ROOT_DIR = os.path.dirname(os.path.abspath(__file__))


def do_task(task_id):
    try:
        import sys
        sys.path.append(f'{ROOT_DIR}/core')

        from worker import CONFIG, get_logger

        logger = get_logger(f'{ROOT_DIR}/logs/{task_id}.log')

        start_time = datetime.datetime.now()

        n = random.randint(1, 5)
        while n > 0:
            logger.info(f"task_{task_id} is doing ...")
            time.sleep(1)
            n -= 1
        end_time = datetime.datetime.now()
        CONFIG[str(time.time())] = str(end_time)

        logger.info(f"task_{task_id} finished. config: {CONFIG}")

        res = {"start": str(start_time), "end": str(end_time), 'config': CONFIG}
        json.dump(res, open(f'{ROOT_DIR}/output/{task_id}.json', 'w'))
    except Exception as e:
        print('-'*50)
        print(e)
        print('-'*50)


app = FastAPI()


@app.get("/")
def read_root():
    task_id = ''.join(str(uuid.uuid1()).split('-')[::-1])
    print('task_id', task_id)
    task = Process(target=do_task, args=(task_id,))
    task.start()

    print("task.is_alive()", task.is_alive())

    while task.is_alive():
        print(f"waiting task {task_id} ...")
        time.sleep(1)

    task.join()

    return json.load(open(f'{ROOT_DIR}/output/{task_id}.json'))
    

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

requsts test文章来源地址https://www.toymoban.com/news/detail-729083.html

import requests
import random
import time
from multiprocessing import Pool

def f(x):
    return x*x


def func(x):
    return f"worker_{x}: hello world"


def download(x):
    url = 'http://127.0.0.1:8000'
    t = random.randint(1, 5)
    time.sleep(t)
    response = requests.get(url)
    return f"worker_{x}({t}): {response.json()}"

if __name__ == '__main__':
    with Pool(5) as p:
        for res in p.map(download, [1,2,3,4,5]):
            print(res)

    # download(1)

到了这里,关于FastAPI 使用记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】如何在FastAPI中使用UUID标记日志,以跟踪一个请求的完整生命周期

    在分布式系统中,一个请求可能会经过多个服务,每个服务都会生成自己的日志。如果我们只使用普通的日志记录,那么很难将这些日志串联在一起,以至难以跟踪一个请求的完整生命周期。 如果能够使用uuid标记日志,为每个请求生成一个唯一的uuid,且这个日志可以在不同

    2024年02月07日
    浏览(39)
  • 【Fastapi框架】Fastapi的使用和进阶

    原文作者 :我辈李想 版权声明 :文章原创,转载时请务必加上原文超链接、作者信息和本声明。 新建main.py文件, 方式一:命令启动 方式二:在mian.py中加启动代码 http://127.0.0.1:8000/ http://127.0.0.1:8000/items/1 http://127.0.0.1:8000/items/1?q=2 http://127.0.0.1:5678/docs#/ http://127.0.0.1:5678/redoc

    2024年02月04日
    浏览(41)
  • 后端“fastapi”+前端“vue3+ts+ElementPlus”上传文件到uploads目录

    确保已安装好python3和fastapi mail.py 运行fastapi服务器 使用浏览器访问 http://127.0.0.1:8000/http://127.0.0.1:8000/docs 确保已安装node.js和yarn 使用vite初始化前端目录  安装element-plus main.ts中导入element-plus  修改vite.config.ts配置“CORS 跨域” 修改App.vue 运行 使用浏览器访问 http://127.0.0.1:70

    2024年02月22日
    浏览(50)
  • python高并发优选之FastAPI

    FastAPI是一个基于Python 3.6+的现代Web框架,它专注于高性能和易用性。FastAPI通过结合多种技术实现了出色的性能,包括异步编程、类型提示和自动文档生成。FastAPI基于Starlette框架,并且使用Pydantic库进行数据验证和转换,从而使RESTful API的开发变得更加容易。 在FastAPI中,GET和

    2024年02月11日
    浏览(41)
  • python系列28:fastapi部署应用

    FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,类似flask,Django,webpy 在部署时可能需要用到下面的库: Uvicorn 或者 Hypercorn负责ASGI 服务器。 Starlette 负责 web 部分。 Pydantic 负责数据部分。 都用pip install安装即可 示例代码如下: 如果你的代码里会出现 async /

    2024年01月18日
    浏览(36)
  • FastAPI 基本使用(一)

      目录 ​编辑 1、基本介绍  2、运行方式 3、创建接口步骤 4、自动生成API文档 4.1 交互式API文档 4.2 备用API文档 5、FastApi 执行顺序 6、Python-Pydantic库 6.1 BaseModel模型 6.2 请求体 + 路径参数 + 查询参数 7、Query/Path/Body/Field 参数(额外的校验) 与 字符串验证 8、typing类型注解 8.1 常

    2024年02月08日
    浏览(36)
  • python FastAPI 如何解决并发和性能问题

    FastAPI 是一个基于 Python 3.6+ 的 Web 框架,它具有简单易用、高性能、快速编写 API 等特点。下面介绍一些 FastAPI 中解决并发和性能问题的方法: FastAPI 使用基于 asyncio 的异步编程模型,在处理 I/O 密集型任务(如网络请求)时可以大大提高性能。在异步编程中,当某个任务发起

    2024年02月11日
    浏览(48)
  • Python之FastAPI返回音视频流

    今天想要记录一下困扰我几天的一个问题,关于FastAPI返回音视频流。首先FastAPI挂载静态资源其实超级简单,但是对于音视频流,如果你想要有播放进度可以拖动,需要单独处理。 有以下几点想跟大家分享: 如何返回音视频流,并且前端video元素可以拖动播放 关于video标签需

    2024年02月02日
    浏览(41)
  • Python - FastAPI 实现 get、post 请求

    目录 一.引言 二.FastAPI Server 构建 1.get - read_items 2.post - create_item 3.uvicorn - run_app 三.Postman 请求 1.post - create_item 2.get - read_items 四.Requests 请求 1.post - create_item 2.get - read_items 五.总结 前面介绍了 LLM 的相关知识,从样本加载、模型加载到后面的模型训练与模型推理,我们经历的完

    2024年02月05日
    浏览(40)
  • 【Python开发】FastAPI 11:构建多文件应用

    以往的文件都是将对外接口写在一个文件里边,而作为应用来说,接口是不可避免分散到多个文件中的,比如某文件负责注册登录模块,某文件负责内管模块,某文件负责业务模块等。FastAPI 也提供了APIRouter 这一工具来进行灵活构建应用,本文将是它的示例。 目录 1 APIRout

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包