挂过科的肉夹馍 · Oracle 批量查询 传入List ...· 1 月前 · |
谦和的冲锋衣 · phpword解析 - OSCHINA - ...· 11 月前 · |
乐观的酸菜鱼 · 线性代数运算、数据处理、画图 - 简书· 1 年前 · |
千年单身的咖啡 · Manage Python ...· 1 年前 · |
我知道Python的GIL和Python中的线程并不像在Go中生成一个go例程那么容易。然而,在我看来,Ruby能够与Puma和Unicorn一起实现多线程并发。我的问题其实是双重的。我的经验仅限于Django频道的Daphne。
如前所述,每个工作人员都是单线程的。当涉及到I/O函数调用时,工作人员会被完全阻塞。我的问题是,为什么Daphne不能为每个请求生成多个线程。当一个线程被I/O阻塞(例如数据库访问)时,CPU切换到执行另一个线程,直到前一个线程被解除阻塞为止。类似地,Node.js是单线程的,但是它通过非阻塞I/O实现并发性非常好。为什么很难实现同样的壮举。用Python?(此外,它缺乏一个好的事件循环。)
发布于 2018-06-08 05:49:56
现在, 乌维霍恩 是daphne的唯一选择,它支持多个处理,并已准备好用于生产。
$ pip install uvicorn
$ uvicorn avilpage.asgi --workers 4
这将用4名工作人员启动服务器。
由于daphne/uvicorn使用异步处理多任务,我想多线程是没有意义的。
发布于 2018-07-06 20:59:17
工人不是单螺纹的。每个线程池都打开一个线程池来运行所有数据库查询和运行sync_to_async的任何内容。Daphne的重点是异步,在主线程中保持异步的速度越快。您希望尽可能地消除上下文切换,这样CPU缓存就会保持新鲜。而且,Python的GIL一次只运行一个线程,这就是为什么多线程不会增加速度的原因。您可以有25个线程,它的运行速度可以达到1个线程: https://gist.github.com/agronick/692d9a7bc41b75449f8f5f7cad93a924
https://stackoverflow.com/questions/50734957
复制相似问题
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
乐观的酸菜鱼 · 线性代数运算、数据处理、画图 - 简书 1 年前 |