-
-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft: support zerocopysend asgi extension #20
base: main
Are you sure you want to change the base?
Conversation
迭代文件描述符的时候使用了run_in_executor,在zerocopy不可用的时候提高效率 |
这个中间件可以作为打开zerocopysend的开关来使用。
或许可以增加一个配置项? |
既然要集成进别的asgi框架,那logger应该也可以考虑下。目前的logger使用的比较散乱,是否可以添加一个app级别的logger统一使用? |
使用配置来控制,这样也能方便 CLI 等方式来控制.
代码部分检查这个新的控制变量来执行不同的行为 |
这个开一个新的 Issue 讨论比较好,如果你有比较完整的想法的话 |
当 zerocopy 不可用时需要完全回落到以前的代码;也就是说 zerocopy 部分需要以可挂载的方式添加进来 |
目前是provider统一读取为文件描述符了,要完全回到原来那种很困难。主要是要考虑多方面因素
|
This pull request introduces 5 alerts when merging 5257dec into 1b0dc6b - view on LGTM.com new alerts:
|
前三条都是静态信息,启动完成后即确定的.架构的话,可以先确定需要在什么地方确定什么状态来调整 |
ASGI服务器是否支持zerocopysend没法在服务器启动的时候知道,只有等第一个request来了以后去scope里面看 |
这就有点离谱了,难道 ASGI 服务器在启动后不能确定自己是否支持 zerocopysend? 这个应该可以修改 ASGI 服务器来实现吧? |
因为asgiapp可以部署在各种asgi兼容服务器上,uvicorn, hypercorn, daphne, nginx unit, prehttp, nonecorn都可以,甚至还可以是个云函数,环境多种多样,app甚至都不知道他在什么服务器上面跑。正规做法是去scope判定,不过如果用户明确设置了这个,则可以认为用户知道这样做会有什么后果,那可以不处理异常了? 然后是目前的实现相关。在 |
考虑到:会做性能调整的用户应该是高级用户的定位.只要在遇到明确是配置问题的地方抛出“配置/初始化”异常,同时退出服务;应该就可以了 |
这个就简单了,把这个event原样扔给asgi服务器,asgi服务器收到不支持的事件自己会报错的 |
判断是否会执行压缩其实是基于 response 的 header 中的 |
另外, PR 的代码请先执行 |
其实可以去 asgiref 提一个需求. 添加一个标准特性:提供一个 API, 允许在获取 ASGI 实例的当前支持的特性和扩展清单 |
django组织的成员挺固执的……估计他们不会听,原来我那个trailingheader的扩展就没通过,我就自己实现了 |
This pull request introduces 7 alerts when merging 6d353c1 into 1b0dc6b - view on LGTM.com new alerts:
|
This pull request introduces 1 alert when merging 41272e2 into 1b0dc6b - view on LGTM.com new alerts:
|
This pull request introduces 1 alert when merging 28a236b into 1b0dc6b - view on LGTM.com new alerts:
|
单元测试中的 |
需要如何改?欢迎直接提方案 |
单元测试部分,可以先完善 PR 涉及的部分,有冲突部分后续解决也可.并行推进效率高很多 |
相关的单元测试加了个patch,应该好了 |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #20 +/- ##
==========================================
- Coverage 65.99% 65.25% -0.75%
==========================================
Files 24 24
Lines 2770 2849 +79
==========================================
+ Hits 1828 1859 +31
- Misses 942 990 +48 ☔ View full report in Codecov by Sentry. |
可否添加些性能对比测试? uvicorn/nonecorn 打开 ZeroCopy/nonecorn 关闭 ZeroCopy |
我做过一般网站的性能测试,确实可以有数倍的提升 |
可否针对这个项目做一个如上三个环境的对比性能测试? 可以放在 performance/asgi_zero_copy 目录下 |
测试结果以文本文件的方式存储,可以简单的(在命令行)重定向输出到文件 |
可以写一个对应的配置文件由用户自己测试吗?或者是由action测试? |
不需要 action, 简单说就是在
|
可以有自己的 requirements 等等,可以理解为某种 demo 子项目 |
可以,正好我魔改过一个异步的webdav库,异步对异步,这个应该可以作为测试的依赖吧 |
这个随意.最关键的是需要添加了 asgi-zero-copy 支持的 asgi-webdav 在上面三个环境下的对比测试,这个最具有说服力 |
@synodriver 性测试部分进展得如何了? |
东西差不多有了,不过最近在肝论文,没push(: |
加油,我要做些web端辅助工具相关的功能,可能会动response部分 |
没事,我这边跟着merge就行 |
第一个原型,还会添加更多测试。
实现细节: