# 定义一个专门创建事件循环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
标签:异步,str,fastapi,start,线程,应用,time,new,loop From: https://www.cnblogs.com/zzay/p/17463583.html