问题标签 [tokio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
58 浏览

asynchronous - Tokio 任务中的 Rust 无限循环 join_all() 并发?

我正在尝试构建一个机器人来检查帐户连接到每个帐户的服务的状态,我想既然他们必须做一些I/O我会尝试使用的Tokio(也“让我的骨头”,因为我从来没有用过)。
我得出了类似于以下的代码:

  • 这段代码实际上是异步和并发的吗?
  • 我在想,如果要管理的帐户数量比主机的 CPU 数量大得多,异步方法更好,还是我错了?
0 投票
1 回答
52 浏览

rust - 第二个完全隔离的 Tokio 运行时

我有一个主要的 Tokio 运行时,以及一些使用reqwest.

我遇到的一个问题是主事件循环可能会阻塞一段时间,这会使 HTTP 请求变慢,直到超时。

当我的代码在主事件循环中运行时,我无法同时创建两个运行时。

Tokio 阻止您从第一个(嵌套)运行时创建第二个运行时。

tokio::task::spawn_blockingwithexecutor::block_on(http_call_fut)似乎没有帮助 - 被阻塞的主事件循环似乎减慢了 HTTP 请求,无论它们在哪里运行。我假设 Tokio 的调度程序逻辑在阻塞时不起作用。


如何将我的 HTTP 请求与可能阻塞的主事件循环隔离开来?

我希望它们全速完成,然后让完成的未来在内存中等待,直到它可以被主事件循环读取。

0 投票
2 回答
166 浏览

multithreading - 如何等待 tokio 任务完成?

我正在尝试HashMap使用该Arc<Mutex<T>>模式作为受Rust 食谱启发的网站抓取练习的一部分来写信。

第一部分使用tokio运行时。我无法完成正在完成的任务并返回它,HashMap因为它只是挂起。

我想返回HashMapmain()主线程被阻塞的地方。如何等待所有异步线程进程完成并返回HashMap

0 投票
0 回答
28 浏览

caching - 如何使用 tokio futures/streams 或等待来自多个位置的保存的 future 来合并昂贵的函数调用

我有一个前向缓存,它计算一些昂贵的值。

在某些情况下,我必须对同一资源执行阻塞调用(而不是通过缓存)

在前向缓存已经在计算“消息”的情况下,我想await(阻塞调用)直到这个正在进行的计算完成。

我当前的(简单)代码的结构类似于:

0 投票
0 回答
61 浏览

rust - Gzip 响应未解压缩

我正在尝试解压缩 gzipped 响应。reqwest有一个客户端构建器标志,可以使用 features 标志进行解压缩gzip。我正在使用带有 tokio 运行时的异步客户端。

0 投票
0 回答
68 浏览

rust - 如何解决“`sqlx::Acquire` 的实现不够通用”

我正在创建一个 actix_web 应用程序。我尝试生成一个新任务并使用已在 actix_web 部分中使用的功能。

但是,如果我编译,我会看到带有一些生命周期信息的以下错误。老实说,我不知道如何处理这些信息......

这不起作用:

如果我删除 spawn 部分,一切都会编译:

要重现此问题,请参阅https://git.jacs-home.eu/juergen/acquire_problem.git

这是完整的代码:

这是依赖项

0 投票
1 回答
45 浏览

rust - tokio::net::TcpStream 如何处理任何类型的错误?

在 tokio::net::TcpStream 的情况下,我坚持正确处理恐慌

或在操场上

大师可以教我如何捕捉这些错误,例如

线程'main'在'调用Result::unwrap()一个Err 值时惊慌失措:Os {代码:101,种类:NetworkUnreachable,消息:“网络无法访问”}',src/main.rs:6:67

0 投票
1 回答
57 浏览

rust - 在这个未来的实现中失败了什么?

虽然代码可以编译,但我不明白为什么await直接使用它会卡在第一个请求中。为什么我需要使用该方法execute_requests而不是在实现上调用它Future

锈游乐场

EDITED:execute_requests是一种简化:它需要访问以self获取请求和其他内容。

0 投票
0 回答
34 浏览

asynchronous - 对象方法中的 Tokio 任务

我目前正在学习rust,我想用以下元素制作一个小程序:

  • 一个 spawner 任务,它创建其他 tokio 任务并将它们存储在 hashmap 中。
  • 在创建任务之前,生成器会查看地图内部以检查任务是否已经在使用相同的 id 运行。在这种情况下,它会更改任务对象中的值,而不是创建新值并让它完成。
  • 当一个任务完成时,它会将自己从 hashmap 中移除。

我在下面的代码中成功地实现了这个机制。但是,我想将任务封装在对象本身的“运行”函数中。当我这样做时,我很难编译它,因为我不清楚 run 方法中 self 参数的所有权。由于对象存储在 HashMap 中,因此我无法将其作为正确运行的 self 参数提供,因此我总是遇到编译问题。此外,我很难在任务和生成器之间创建正确的锁定机制,特别是因为我无法在不锁定整个哈希图的情况下更改任务对象的属性。

有人知道我如何实现这个吗?

0 投票
0 回答
25 浏览

rust - 将 Tokio 发送器与 for_each_concurrent 闭包一起使用

我很难弄清楚如何让从 tokio 消耗的消息mpsc::channel同时运行。我目前的方法是调用into_stream()调用recv(),然后调用for_each_concurrent这个包装的对象。据我了解,这应该在消息进入时同时执行代码,而不是按顺序执行(如您使用时recv())。

下面的示例省略了不相关的细节,但总体思路应该很容易看到。

这会导致编译器错误,提示无法将事物 (upload_id和) 移入闭包中。我已经尝试了针对这些问题提出的各种更普遍的方法,但似乎没有一种方法适用于这种特定情况。我在这里错过了什么重要的东西吗?示例错误如下。txbFnMut

任何帮助深表感谢。谢谢!