我正在尝试使用 MPSC 构建多线程应用程序,但遇到了标题中的错误。我不确定这个用例的正确模式是什么 - 我正在寻找一种模式,它允许我克隆生产者通道并将其移动到要使用的新线程中。
这个新线程将保持一个打开的 websocket,并在收到 websocket 消息时通过生产者发送 websocket 消息数据的子集。消费者线程中将需要来自其他线程的数据,这就是为什么我认为 MPSC 模式是一个合适的选择。
除了标题中的消息之外,它还显示以下内容:
`std::sync::mpsc::Sender<i32>` cannot be shared between threads safely
help: the trait `std::marker::Sync` is not implemented for `std::sync::mpsc::Sender`
Run Code Online (Sandbox Code Playgroud)
我可以/应该Send为此实施吗?Rc这是使用or的合适时机吗Pin?我相信这种情况正在发生,因为我试图发送一个未在闭包Send中实现的类型,但我不知道如何利用它或在这种情况下要达到什么目的。.awaitasync
我已经能够将我的问题简化为:
use futures::stream::{self, StreamExt};
use std::sync::mpsc::{channel, Receiver, Sender};
#[tokio::main]
async fn main() {
let (tx, rx): (Sender<i32>, Receiver<i32>) = channel();
tokio::spawn(async move {
let a = [1, 2, 3];
let mut s = stream::iter(a.iter())
.cycle()
.for_each(move |int| async { …Run Code Online (Sandbox Code Playgroud) 我在ActionDispatch::SystemTestCase本地运行良好,但在 Heroku CI 中失败并出现以下错误:
Selenium::WebDriver::Error::UnknownError: unknown error: net::ERR_NAME_NOT_RESOLVED
(Session info: headless chrome=85.0.4183.83)
test/system/my_failing_test.rb:29
Run Code Online (Sandbox Code Playgroud)
值得注意的是,第 29 行是 Capybaravisit命令,因此出现了与 DNS 相关的错误消息。
更重要的是,我遵循 Heroku 文档在无头 Chrome 上设置 Selenium。我相信该配置的重要部分在这里: https://devcenter.heroku.com/articles/heroku-ci-browser-and-user-acceptance-testing-uat#testing-with-selenium
总结一下我的配置:我的测试环境有以下构建包app.json:
heroku/ruby
heroku/google-chrome
heroku/chromedriver
...并且我逐字添加了 Heroku 建议的“特殊配置”(上述链接中的#3) https://github.com/heroku/heroku-buildpack-google-chrome#selenium
使用构建包时是否缺少某些服务器配置?处理 buildpack 缺少的测试服务器 Web 调用的
功能是什么?rails test
我已经为此奋斗了一段时间,所以非常感谢任何建议!
continuous-integration selenium ruby-on-rails heroku selenium-chromedriver