问题标签 [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.
python - 在三重奏中,我怎样才能拥有与我的对象一样长的后台任务?
我正在编写一个将在其生命周期内产生任务的类。由于我使用的是Trio,因此我无法在没有托儿所的情况下生成任务。我的第一个想法是self._nursery
在我的班级中有一个我可以生成任务的课程。但似乎托儿所对象只能在上下文管理器中使用,因此它们总是在创建它们的同一范围内关闭。我不想从外部传入托儿所,因为它是一个实现细节,但我确实希望我的对象能够产生与对象一样长的任务(例如,心跳任务)。
如何使用 Trio 编写这样一个具有长期后台任务的类?
python - 结合 py.test 和 trio/curio
我会结合 pytest 和 trio(或 curio,如果这更容易的话),即将我的测试用例编写为协程函数。通过在以下位置声明自定义测试运行器,这相对容易实现conftest.py
:
这允许我编写这样的测试用例:
但这是很多样板文件。在非异步代码中,我会将其分解为一个夹具:
有没有办法在三重奏中做同样的事情,即实现异步固定装置?理想情况下,我会写:
python - 如果一个失败不会取消所有任务的三重奏托儿所
我想用三重奏实现一个服务器。单个客户端连接由托儿所产生的任务处理。然而,三位文档说“如果托儿所内的任何任务以未处理的异常结束,那么托儿所会立即取消托儿所内的所有任务。”。这对我的用例来说是非常不幸的。我宁愿在记录错误时继续为其他连接提供服务。有没有办法做到这一点?
python - 如何在 python-trio 中的 KeyboardInterrupt 后清理连接
我的班级在连接到服务器时应该立即发送登录字符串,然后当会话结束时它应该发送退出字符串并清理套接字。下面是我的代码。
我的逻辑不太行。好吧,如果我杀死netcat
听众,它会起作用,所以我的会话如下所示:
请注意,Logoff
字符串已发送出去,尽管在这里没有意义,因为那时连接已经断开。
但是我的目标是Logoff
当用户KeyboardInterrupt
. 在这种情况下,我的会话看起来类似于:
请注意,Logoff
尚未发送。
有任何想法吗?
python-trio - 未来/承诺之类的 Python 中 Trio 的东西?
假设我有一个Messenger
负责发送和接收消息的类。现在我有一个发送请求并通过它等待响应的服务,将每对与消息中的 id 字段匹配。在 asyncio 中,我会这样做:
所以我可以从不同的任务发出多个请求,并在每个任务中等待相应的响应。(并且某些消息可能没有相应的响应,而是以另一种方式处理。)
但是我如何在 Trio 中做到这一点?我应该为每个请求创建一个事件/条件/队列并将响应放在预定义的位置吗?如果是,哪种情况最适合这种情况?或者还有另一种方法可以做到这一点?
python - asyncio 和 trio 之间的核心区别是什么?
今天,我发现了一个名为trio的库,它自称是一个供人类使用的异步 API。requests
这些词与'有点相似。requests
确实是一个很好的图书馆,我想知道trio
.
关于它的文章并不多,我只是找到一篇讨论curio
和的文章asyncio
。令我惊讶trio
的是,它说自己甚至比curio
(下一代古玩)还要好。
看了一半的文章,我找不到这两个异步框架的核心区别。它只是给出了一些curio
实现比asyncio
's 更方便的例子。但底层结构几乎相同。
那么有人可以给我一个我必须接受trio
或curio
优于的理由asyncio
吗?或者解释一下为什么我应该选择trio
而不是 built-in asyncio
?
python - 解决Hettinger示例的异步三重奏方法
Raymond Hettinger就 Python 中的并发进行了一次演讲,其中一个示例如下所示:
本质上,我们跟踪这些链接并打印接收到的字节数,运行大约需要 20 秒。
今天我发现trio库有非常友好的 api。但是,当我尝试将它与这个相当基本的示例一起使用时,我没有做对。
第一次尝试(运行大约相同的 20 秒):
第二个(相同的速度):
那么这个例子应该如何使用 trio 来处理呢?
python - 在基于 trio 的 Python 应用程序中生成进程并在进程之间进行通信
对于 Python 库流体图像的实习,我们正在研究使用库trio编写具有客户端/服务器模型的 HPC 并行应用程序是否是一个好主意。
对于异步编程和 i/o,三重奏确实很棒!
然后,我想知道如何
- 生成进程(执行 CPU-GPU 受限工作的服务器)
- 在进程之间通信复杂的 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/)也可能是解决这个问题的好方法的一部分。
python - 将python-trio中的信号量和时间限制与asks http请求相结合
我正在尝试以异步方式使用 Python,以加快我对服务器的请求。服务器的响应时间很慢(通常是几秒钟,但有时也快于一秒钟),但并行运行良好。我无权访问此服务器,也无法对其进行任何更改。所以,我有一个很大的 URL 列表(在下面的代码中),我事先知道,并且希望通过一次发出请求pages
来加快它们的加载速度。NO_TASKS=5
另一方面,我不想让服务器超载,所以我希望每个请求之间的最小暂停时间为 1 秒(即每秒 1 个请求的限制)。
到目前为止,我已经使用 Trio 队列成功地实现了信号量部分(一次五个请求)。
但是,我错过了限制部分的实现,即max的实现。每秒 1 个请求。您可以在上面看到我这样做的尝试(前五行async_load_page
),但是正如您在执行代码时看到的那样,这不起作用:
我花了一些时间寻找答案,但找不到任何答案。