fastapi 异步应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 定义一个专门创建事件循环loop的函数,在另一个线程中启动它 def start_loop(loop): asyncio.set_event_loop(loop) loop.run_forever() @app .get( "/addr" ) def index(adcode: str = None , address: str = None , level: str = None ): import time message = { "code" : 500 , "msg" : "failed" , "data" : ''} if adcode and address and level: start_time = time.time() new_loop = asyncio.new_event_loop() # 在当前线程下创建事件循环,(未启用),在start_loop里面启动它 t = threading.Thread(target = start_loop, args = (new_loop,)) # 通过当前线程开启新的线程去启动事件循环 t.start() coroutine1 = run_rel(address, adcode, str (level)) ret = asyncio.run_coroutine_threadsafe(coroutine1, new_loop) # 这几个是关键,代表在新线程中事件循环不断“游走”执行 print (ret.result()) print ( "总耗时: " , time.time() - start_time) message.update({ "code" : 200 , "msg" : "success" , "data" : ret.result()}) return message |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律