使用标准对 actix_webapi进行基准测试时出现问题

我一直在尝试使用Criterion板条箱将基准测试添加到我的actix_web应用程序中。我一直在努力使其正常工作,因为AsyncExecutor特征未针对tokio0.2.x 实现。我尝试为actix_rt运行时实现该特征,但也遇到了问题,下面的代码

我一直在尝试使用Criterion板条箱将基准测试添加到我的actix_web应用程序中。我一直在努力使其正常工作,因为AsyncExecutor特征未针对tokio0.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(),
        }
    }
}

这个错误,因为 block_on 函数actix_rt(和tokio0.2.x)有一个签名block_on(&mut self, ...) -> ... { ... }所以我不能实现这个特征,因为这个特征有一个不可变的引用。

在我进一步挖掘自己试图使这项工作之前,我想问一下我所尝试的是否可能。有没有办法使用Criterionactix?或者现在这是不可能的?如果不可能,还有其他框架可用,或者我应该看看生锈工具链之外的解决方案?

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

干杯

0

actix-rtv2 的block_on方法现在需要&selfafter 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())
        }
    }
0

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

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(7)
如何使用CSS在HTML中定位元素
上一篇
您可以强制React组件在不调用setState的情况下重新渲染吗
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(58条)