【问题标题】:Trouble Benchmarking actix_web api with Criterion使用 Criterion 对 actix_web api 进行基准测试时遇到问题
【发布时间】:2021-02-21 01:05:51
【问题描述】:

我一直在尝试使用Criterion 板条箱将基准测试添加到我的actix_web 应用程序中。我一直在努力让它工作,因为AsyncExecutor trait 没有为tokio 0.2.x 实现。我尝试为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(和tokio0.2.x)的block_on函数有一个签名 block_on(&amp;mut self, ...) -&gt; ... { ... } 所以我无法实现 trait,因为 trait 有一个不可变的引用。

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

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

干杯!

【问题讨论】:

  • actix-rt 2.0 的 block_on 采用 &amp;self now after upgrading to tokio 1.0。升级不是一种选择吗?
  • 如果没有,也许您可​​以将rt 包裹在RefCell 中?

标签: rust async-await rust-tokio actix-web rust-criterion


【解决方案1】:

actix-rt v2 的 block_on 方法现在采用 &amp;self after upgrading to tokio 1.0。升级应该可以解决您的问题:

// pin your deps: https://github.com/actix/actix-web/issues/1944
actix-rt = "=2.0.0-beta.2"
actix-web = "4.0.0-beta.1"
actix-service = "=2.0.0-beta.3"

如果升级不是一个选项,您可以使用内部可变性包装器,例如RefCell

impl AsyncExecutor for ActixRuntime {
    fn block_on<T>(&self, future: impl Future<Output=T>) -> T {
        self.rt.borrow_mut().block_on(future)
    }
}

pub struct ActixRuntime {
    rt: RefCell<actix_rt::Runtime>,
}

impl ActixRuntime {
    pub fn new() -> Self {
        ActixRuntime {
            rt: RefCell::new(actix_rt::Runtime::new().unwrap())
        }
    }

【讨论】:

  • axtix_rt 2.0 修复了与 Criterion 的集成,但它显然与 actix-web 3.3.2(或目前任何稳定的 actix-web 版本)不兼容
  • 如果升级到v4.0-beta导致依赖冲突,可以pin you dependencies
  • 我可能会等待 4.x 稳定下来,由于生命周期不匹配,尝试使用 RefCell 不起作用(编译器希望未来具有静态生命周期)。不过谢谢你的帮助!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2023-01-14
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多