首页 > 其他分享 >fastapi多线程非阻塞启动

fastapi多线程非阻塞启动

时间:2023-03-21 18:13:39浏览次数:46  
标签:__ run thread fastapi self 阻塞 uvicorn import 多线程

1 问题描述

我在run.py文件下的主函数如下所示:

import uvicorn
from fastapi import FastAPI

app = FastAPI(
    title="chatglm",
    description="开源版的chatglm接口",
    version="1.0.0",

)

if __name__ == '__main__':
    uvicorn.run(
        "run:app", host="0.0.0.0", port=9899
    )

运行run.py后,程序会阻塞,如下:

image-20230321174738597

uvicorn这行代码之后,其他的程序、函数都不会执行,因为阻塞了


2 解决方法

使用多线程的方法。具体如下:

import time
import uvicorn
import contextlib
import threading


class UvicornServer(uvicorn.Server):
    def install_signal_handlers(self):
        pass

    @contextlib.contextmanager
    def run_in_thread(self):
        thread = threading.Thread(target=self.run)
        thread.start()
        try:
            while not self.started:
                time.sleep(1e-3)
            yield
        finally:
            self.should_exit = True
            thread.join()
            
if __name__ == '__main__':
    config = uvicorn.Config("run:app", host="0.0.0.0", port=9899, log_level="info")
    server = UvicornServer(config=config)

    with server.run_in_thread():
        print("你要执行的其他程序")

标签:__,run,thread,fastapi,self,阻塞,uvicorn,import,多线程
From: https://www.cnblogs.com/selfcs/p/17240902.html

相关文章

  • 【python】多线程并发,rpc接口性能测试
    1、官方文档https://docs.python.org/3/library/concurrent.futures.html 2、安装python3.x中自带了concurrent.futures模块python2.7需要安装futures模块,使用命令......
  • javaSE-day12(多线程)
    1.多线程的常用方法Thread提供了很多与线程操作相关的方法方法:publicvoidrun():线程的任务方法publicvoidstart():启动线程publicStringgetName():获取当前......
  • C++温故补缺(十五):多线程
    多线程参考:CSDN,知乎传统C++(C++11之前)中并没有引入线程的概念,如果想要在C++中实现多线程,需要借助操作系统平台提供的API,如Linux的<pthread.h>,或windows下的<windows.......
  • Java EasyExcel带格式多线程导出百万数据
     JavaEasyExcel带格式多线程导出百万数据1.背景说明2.方案概述(1)大数据量导出问题主要是以下三个地方:(2)将写入导出Excel等功能单独分开成一个微服务:(3)注意:(4)方......
  • Lniux有关python多线程的历史
    在内核2.6以前的调度实体都是进程,内核并没有真正支持线程。它是能过一个系统调用clone()来实现的,这个调用创建了一份调用进程的拷贝,跟fork()不同的是,这份进程拷贝完全共......
  • 多线程面试——CountDownLatch,CyclicBarrier,Semaphore
    0.总结1.CountDownLatch是1个线程等待其他线程,CyclicBarrier是多个线程相互等待;2.CountDownLatch是计数-1,直到减为0,CyclicBarrier是计数+1,直到达到指定值;3.CountDownLatch......
  • 尚硅谷_宋红康_第10章_多线程
    第10章_多线程讲师:尚硅谷-宋红康(江湖人称:康师傅)官网:http://www.atguigu.com本章专题与脉络我们之前学习的程序在没有跳转语句的情况下,都是由上至下沿着一条路径依......
  • Python 多进程、多线程对比(转载)
    https://www.runoob.com/w3cnote/python-single-thread-multi-thread-and-multi-process.html具体实验见原文,这里只是引用实验结果,方便查询......
  • 多线程
    多线程线程的创建Thread类自定义线程类继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start()方法启动线程publicclassDemo01extendsThread{p......
  • Java多线程开发CompletableFuture的应用
    ​做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用了,了解它的一些用法后相信你会对它爱不释手(呸渣男,......