V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chaogg
V2EX  ›  Python

FastAPI 的接口中使用 asyncio.Lock 效率怎么这么低?获取和释放都要几秒

  •  
  •   chaogg · 2020-11-29 16:18:47 +08:00 · 2859 次点击
    这是一个创建于 1484 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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

    mckelvin
        1
    mckelvin  
       2020-11-29 16:55:22 +08:00   ❤️ 2
    单位你没仔细看哦。1e-06 s = 0.000001 s
    chaogg
        2
    chaogg  
    OP
       2020-11-29 17:07:36 +08:00
    @mckelvin 大意了
    laike9m
        3
    laike9m  
       2020-11-29 17:13:30 +08:00 via Android
    🤣
    xiaolinjia
        4
    xiaolinjia  
       2020-11-29 17:36:25 +08:00
    你把大伙都整笑了。
    chaogg
        5
    chaogg  
    OP
       2020-11-29 17:53:41 +08:00
    @xiaolinjia 我自己也笑了
    CallMeReznov
        6
    CallMeReznov  
       2020-11-29 19:40:31 +08:00
    abersheeran
        7
    abersheeran  
       2020-11-30 09:10:17 +08:00
    噗,你要是用了 time_ns(),应该就能感觉出来不太对了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2625 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:32 · PVG 08:32 · LAX 16:32 · JFK 19:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.