问题标签 [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 投票
1 回答
2410 浏览

python - 在三重奏中,我怎样才能拥有与我的对象一样长的后台任务?

我正在编写一个将在其生命周期内产生任务的类。由于我使用的是Trio,因此我无法在没有托儿所的情况下生成任务。我的第一个想法是self._nursery在我的班级中有一个我可以生成任务的课程。但似乎托儿所对象只能在上下文管理器中使用,因此它们总是在创建它们的同一范围内关闭。我不想从外部传入托儿所,因为它是一个实现细节,但我确实希望我的对象能够产生与对象一样长的任务(例如,心跳任务)。

如何使用 Trio 编写这样一个具有长期后台任务的类?

0 投票
1 回答
299 浏览

python - 结合 py.test 和 trio/curio

我会结合 pytest 和 trio(或 curio,如果这更容易的话),即将我的测试用例编写为协程函数。通过在以下位置声明自定义测试运行器,这相对容易实现conftest.py

这允许我编写这样的测试用例:

但这是很多样板文件。在非异步代码中,我会将其分解为一个夹具:

有没有办法在三重奏中做同样的事情,即实现异步固定装置?理想情况下,我会写:

0 投票
1 回答
428 浏览

python - 如果一个失败不会取消所有任务的三重奏托儿所

我想用三重奏实现一个服务器。单个客户端连接由托儿所产生的任务处理。然而,三位文档说“如果托儿所内的任何任务以未处理的异常结束,那么托儿所会立即取消托儿所内的所有任务。”。这对我的用例来说是非常不幸的。我宁愿在记录错误时继续为其他连接提供服务。有没有办法做到这一点?

0 投票
1 回答
149 浏览

python-3.5 - python-trio: AttributeError: sendall

我只是想echo-client-low-level.pypython-trio 文档中运行:

然而他们的例子产生了一个令人讨厌的AttributeError: sendall错误:

在检查了GitHub之后,似乎sendall已经intentionally omitted.

我有点困惑,我错过了什么吗?

0 投票
1 回答
517 浏览

python - 如何在 python-trio 中的 KeyboardInterrupt 后清理连接

我的班级在连接到服务器时应该立即发送登录字符串,然后当会话结束时它应该发送退出字符串并清理套接字。下面是我的代码。

我的逻辑不太行。好吧,如果我杀死netcat听众,它会起作用,所以我的会话如下所示:

请注意,Logoff字符串已发送出去,尽管在这里没有意义,因为那时连接已经断开。

但是我的目标是Logoff当用户KeyboardInterrupt. 在这种情况下,我的会话看起来类似于:

请注意,Logoff尚未发送。

有任何想法吗?

0 投票
1 回答
561 浏览

python-trio - 未来/承诺之类的 Python 中 Trio 的东西?

假设我有一个Messenger负责发送和接收消息的类。现在我有一个发送请求并通过它等待响应的服务,将每对与消息中的 id 字段匹配。在 asyncio 中,我会这样做:

所以我可以从不同的任务发出多个请求,并在每个任务中等待相应的响应。(并且某些消息可能没有相应的响应,而是以另一种方式处理。)

但是我如何在 Trio 中做到这一点?我应该为每个请求创建一个事件/条件/队列并将响应放在预定义的位置吗?如果是,哪种情况最适合这种情况?或者还有另一种方法可以做到这一点?

0 投票
1 回答
16350 浏览

python - asyncio 和 trio 之间的核心区别是什么?

今天,我发现了一个名为trio的库,它自称是一个供人类使用的异步 API。requests这些词与'有点相似。requests确实是一个很好的图书馆,我想知道trio.

关于它的文章并不多,我只是找到一篇讨论curio和的文章asyncio。令我惊讶trio的是,它说自己甚至比curio(下一代古玩)还要好。

看了一半的文章,我找不到这两个异步框架的核心区别。它只是给出了一些curio实现比asyncio's 更方便的例子。但底层结构几乎相同。

那么有人可以给我一个我必须接受triocurio优于的理由asyncio吗?或者解释一下为什么我应该选择trio而不是 built-in asyncio

0 投票
2 回答
1616 浏览

python - 解决Hettinger示例的异步三重奏方法

Raymond Hettinger就 Python 中的并发进行了一次演讲,其中一个示例如下所示:

本质上,我们跟踪这些链接并打印接收到的字节数,运行大约需要 20 秒。

今天我发现trio库有非常友好的 api。但是,当我尝试将它与这个相当基本的示例一起使用时,我没有做对。

第一次尝试(运行大约相同的 20 秒):

第二个(相同的速度):

那么这个例子应该如何使用 trio 来处理呢?

0 投票
5 回答
1330 浏览

python - 在基于 trio 的 Python 应用程序中生成进程并在进程之间进行通信

对于 Python 库流体图像的实习,我们正在研究使用库trio编写具有客户端/服务器模型的 HPC 并行应用程序是否是一个好主意。

对于异步编程和 i/o,三重奏确实很棒!

然后,我想知道如何

  1. 生成进程(执行 CPU-GPU 受限工作的服务器)
  2. 在进程之间通信复杂的 Python 对象(可能包含大型 numpy 数组)。

我没有在其文档中找到使用 trio 执行此操作的推荐方法(即使echo 客户端/服务器教程是一个好的开始)。

在 Python 中生成进程并进行通信的一种明显方法是使用multiprocessing

在 HPC 环境中,我认为一个好的解决方案是使用 MPI(http://mpi4py.readthedocs.io/en/stable/overview.html#dynamic-process-management)。作为参考,我还必须提到rpyc ( https://rpyc.readthedocs.io/en/latest/docs/zerodeploy.html#zerodeploy )。

我不知道是否可以将此类工具与 trio 一起使用,以及执行此操作的正确方法是什么。

一个有趣的相关问题

备注PEP 574

在我看来,PEP 574 (参见https://pypi.org/project/pickle5/)也可能是解决这个问题的好方法的一部分。

0 投票
4 回答
991 浏览

python - 将python-trio中的信号量和时间限制与asks http请求相结合

我正在尝试以异步方式使用 Python,以加快我对服务器的请求。服务器的响应时间很慢(通常是几秒钟,但有时也快于一秒钟),但并行运行良好。我无权访问此服务器,也无法对其进行任何更改。所以,我有一个很大的 URL 列表(在下面的代码中),我事先知道,并且希望通过一次发出请求pages来加快它们的加载速度。NO_TASKS=5另一方面,我不想让服务器超载,所以我希望每个请求之间的最小暂停时间为 1 秒(即每秒 1 个请求的限制)。

到目前为止,我已经使用 Trio 队列成功地实现了信号量部分(一次五个请求)。

但是,我错过了限制部分的实现,即max的实现。每秒 1 个请求。您可以在上面看到我这样做的尝试(前五行async_load_page),但是正如您在执行代码时看到的那样,这不起作用:

我花了一些时间寻找答案,但找不到任何答案。