问题标签 [python-trio]

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 投票
2 回答
721 浏览

python-3.x - 从 Nursery 对象中捕获返回值

当使用 trio 和nurseryobjects 时,如何捕获从方法返回的任何值?

以trio 网站上的这个例子为例:

我对其进行了修改,以便每个方法都返回一个list. 您将如何捕获返回值以便我可以打印它们?

0 投票
1 回答
397 浏览

python-3.x - TRIO Lib 队列获取和放置

您好,我正在尝试将三重奏与两个异步函数和一条消息一起使用。但它并没有推出消费者,我真的不明白为什么。生产者在“队列”中发送良好,一旦饱和就不会发送任何内容。但消费者并不买账。还是我犯了一个错误?先感谢您

0 投票
1 回答
229 浏览

python - 没有 IO 操作的 Trio 执行时间

我正在做一些例子来了解它是如何异步工作的。checkpoint我阅读了 Trio 文档,我认为每次只能在循环中执行一个任务,并且每次scheduler决定将执行哪个任务。

我做了一个示例来测试它,在三重奏示例中,我没有在我生成的子节点中使用任何检查点,nursery但是这个示例比同步版本快两倍。

异步示例:

结果:

同步示例:

结果:

为什么?我希望在同一时间,因为我没有在我的代码中使用任何检查点。似乎有 2 个线程同时运行或子函数中是否有任何 I/O?

0 投票
1 回答
239 浏览

python - Trio:从同一个 fd 读取多个任务

我有一个文件描述符,我想用多个任务从中读取。fd 上的每个 read() 请求都将返回一个完整的、独立的数据包(只要数据可用)。

我幼稚的实现是让每个工作人员运行以下循环:

不幸的是,这不起作用,因为ResourceBusyError如果多个任务在同一个 fd 上阻塞,则 trio 会引发。所以我的下一个迭代是编写一个自定义等待函数:

在哪里

但是,在测试中,我收到这样的 og 消息:

换句话说:

  1. 所有任务进入trio.hazmat.wait_readable
  2. 一个任务成功返回并尝试解除下一个任务(但没有)
  3. 其他任务收到 BusyError 并自行停放
  4. 什么都没有发生,因为所有工人都停了下来

解决这个问题的正确方法是什么?

0 投票
2 回答
448 浏览

python - Python:同步三重任务和常规线程的方法

我发现自己需要将 Trio 任务与 Python 线程同步。目前,我正在使用threading.LockTrio 任务必须使用trio.run_sync_in_worker_thread(lock.acquire).

我认为也应该可以使用trio. Lock锁并让线程使用trio.BlockingTrioPortal.run_sync(lock.acquire).

这些解决方案中的任何一个都比另一个有优势吗?

原则上会比这做得更好吗?例如,实现一个“本机”三重奏方法,无需单独的工作线程就可以等待threading.Lock,或者是否有根本原因需要这样做?

0 投票
4 回答
2376 浏览

python-3.x - 如何在 Trio 中收集任务结果?

我编写了一个脚本,它使用一个 Nursery 和 asks 模块来循环并根据循环变量调用一个 API。我收到回复,但不知道如何像使用 asyncio 一样返回数据。

我还有一个关于将 API 限制为每秒 5 个的问题。

当我运行nursery.start_soon(fetch...) 时,我在fetch 中打印数据,但是如何返回数据?我没有看到任何类似于 asyncio.gather(*tasks) 函数的东西。

此外,我可以将会话数限制为 1-4,这有助于低于每秒 5 个 API 的限制,但我想知道是否有内置方法可以确保在任何给定的秒内调用不超过 5 个 API ?

0 投票
3 回答
548 浏览

python - 如何从三个 ReceiveStream 中一次读取一行?

asyncio 有StreamReader.readline(),允许类似:

(我async for在 asyncio 中看不到可用,但这将是明显的演变)

如何用三重奏达到同等效果?

我在 trio 0.9 中没有直接看到对此的任何高级支持。我所看到的只是ReceiveStream.receive_some()返回任意大小的二进制块;对我来说,将其解码并将其转换为逐行的东西似乎并非易事。有我可以使用的标准库函数或代码片段吗?我发现 io stdlib 模块看起来很有希望,但我看不到任何提供“提要”方法的方法。

0 投票
2 回答
652 浏览

python-trio - 三重奏和烧瓶结合

我正在尝试制作一个 HTTP API,它可以创建和销毁打开 TCP 连接到远程服务器流式传输约 15 秒数据的并发任务。稍后我将不得不弄清楚如何处理数据。现在我只是打印它。

在下面的示例中,我可以通过导航到http://192.168.1.1:5000/addconnection来创建多个 TCP 连接。

问题:

1)这种方法合理吗?我认为 Flask 可能会为每个 /addconnection 请求创建一个新线程。我不确定这样做会遇到什么性能限制。

2)是否可以跟踪每个连接?我想实现/listconnections 和/removeconnections。

3)有没有更Pythonic的方式来做到这一点?我读过一些关于 Celery 的文章,但我还不是很了解它。也许还有其他已经存在的工具可以处理类似的问题。

0 投票
1 回答
50 浏览

python - 如何压缩根据输入选择多少并发任务的代码?

我有一个可以处理异步请求询问库和三重奏的刮板项目。我想根据输入选择多少并发任务,但我的代码很长而且很原始

我将 trio 的产卵和托儿所对象用于并发任务(文档:https ://trio.readthedocs.io/en/latest/reference-core.html )

这是我草率的代码:

我想你可以理解我的意思,这个示例代码在理论上是有效的,但是对于可能会减少到更少代码行的东西来说它很长。

这种方案在处理 10 或 20 名工人时会变得特别长,并且总是限制在预定义的数量内。

就其本身而言,每个孩子都是相同的,相同的代码,它只是从带有 importlib 的外部模块 .py 文件中获取不同的数据(例如参数和 url)。

有没有办法将其缩减为更优化的代码?

0 投票
1 回答
150 浏览

python - 关于如何调整参数以更快地下载网址并减少错误的任何建议?(三重奏+问)

我正在编写下载 url 列表的简单程序。

准备网址列表

主要代码

输出为connections=10 输出为connections=20 输出为connections=100 输出为connections=1000 输出为connections=10000

当有许多任务和许多连接时,我得到的大多数请求都以RequestTimeoutand失败gaierror

输出

关于如何调整此参数的任何建议:
为了更快地下载 url 而错误更少?

  • 任务/网址的数量trio.run(main, urls)(将其分成块更好吗?)
  • 连接数(这仅限于我的硬件吗?1000太大了10000??)
  • timeoutconnection_timeout