rust - 使用 Criterion 对 actix_web api 进行基准测试时遇到问题
问题描述
我一直在尝试使用Criterion crate 将基准测试添加到我的actix_web应用程序中。我一直在努力让它工作,因为tokio 0.2.x没有实现AsyncExecutor特征。我尝试为actix_rt运行时实现特征,但也遇到了问题,代码如下
impl AsyncExecutor for ActixRuntime {
fn block_on<T>(&self, future: impl Future<Output=T>) -> T {
self.rt.block_on(future)
}
}
pub struct ActixRuntime {
rt: actix_rt::Runtime,
}
impl ActixRuntime {
pub fn new() -> Self {
ActixRuntime {
rt: actix_rt::Runtime::new().unwrap(),
}
}
}
这会出错,因为actix_rt(和tokio 0.2.x)的 block_on 函数的签名为
block_on(&mut self, ...) -> ... { ... }
所以我无法实现该特征,因为该特征具有不可变的引用。
在我进一步深入尝试完成这项工作之前,我想问一下我正在尝试的事情是否可行。有没有办法将Criterion 与actix一起使用?还是现在这不可能?如果不可能,是否有任何其他可用的框架,或者我应该查看 rust 工具链之外的解决方案?
感谢您提供任何建议或帮助,欢迎链接和示例!
干杯!
解决方案
似乎没有一个好方法可以做到这一点。没有支持 actix_rt 2.0.x 的稳定 actix 版本(尽管它会修复 AsyncExecutor 中的可变性冲突)。截至目前,actix-web 4.0.x 处于测试阶段,对于我现有的应用程序来说太不稳定(使用时会导致各种问题)。现在我将等到 actix-web 4.0.0 发布并稳定后为我的 api 实施基准测试。
推荐阅读
- javascript - 如果曾孙数组为空,则从对象中删除数组
- excel - 根据前两列生成第三列序号
- jenkins - Jenkins 代理在 Gradle 构建期间内存不足导致 hudson.remoting.RequestAbortedException
- types - 当参数的类型是联合类型时,确定 Racket 中参数的具体类型
- c++ - 为什么 C++ 编译器没有检测到正确声明的类?
- python - 在基于文本的 RPG 中出现大量文本后输入错误的语法错误
- java - Eclipse java.lang.module.FindException 和 java.lang.ClassNotFoundException
- c# - 如何使用存储库模式模拟 MongoDB 数据访问层?
- c# - C# - 无法识别右括号
- validation - Vuepress - 任何编译/批量验证页面降价内容的方法?