app = FastAPI()
lock: Optional[asyncio.Lock] = None
spider = Spider()
@app.get('/xxx')
async def xxx(s: str):
t1 = time()
await lock.acquire()
t2 = time()
r = await spider.check(s)
t3 = time()
lock.release()
t4 = time()
logging.info(f"等待耗时{t2-t1}s,check 耗时{t3-t2}s,归还耗时{t4-t3}s")
return r
async def main():
log_config = generate_logging_dict()
loop = asyncio.get_event_loop()
global lock
lock = asyncio.Lock()
config = Config(app=app, loop=loop, log_config=log_config, workers=1,
host="0.0.0.0", port=8000)
server = Server(config)
tasks = [server.serve()]
await asyncio.gather(*tasks)
await spider.close()
if __name__ == '__main__':
config_root_logger()
asyncio.run(main())
获取 lock 和归还 lock 的耗时居然在 5~8s 吗?这也太奇葩了吧。 选取几次代表性的日志如下:
等待耗时 5.4836273193359375e-06s,check 耗时 1.3153741359710693s,归还耗时 8.58306884765625e-06s
等待耗时 5.9604644775390625e-06s,check 耗时 0.6164107322692871s,归还耗时 1.1205673217773438e-05s
等待耗时 6.67572021484375e-06s,check 耗时 0.5971970558166504s,归还耗时 8.344650268554688e-06s
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.