首页 > 解决方案 > 使用 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, ...) -> ... { ... } 所以我无法实现该特征,因为该特征具有不可变的引用。

在我进一步深入尝试完成这项工作之前,我想问一下我正在尝试的事情是否可行。有没有办法将Criterionactix一起使用?还是现在这不可能?如果不可能,是否有任何其他可用的框架,或者我应该查看 rust 工具链之外的解决方案?

感谢您提供任何建议或帮助,欢迎链接和示例!

干杯!

标签: rustasync-awaitrust-tokioactix-webrust-criterion

解决方案


似乎没有一个好方法可以做到这一点。没有支持 actix_rt 2.0.x 的稳定 actix 版本(尽管它会修复 AsyncExecutor 中的可变性冲突)。截至目前,actix-web 4.0.x 处于测试阶段,对于我现有的应用程序来说太不稳定(使用时会导致各种问题)。现在我将等到 actix-web 4.0.0 发布并稳定后为我的 api 实施基准测试。


推荐阅读