问题标签 [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 - 在异步生成器函数中从托儿所内部屈服是不是很糟糕?
我被告知下面的代码是不安全的,因为它不允许有一个从托儿所内部产生的异步生成器,除非它是一个异步上下文管理器。
我很难理解这怎么可能打破。如果有人可以提供一个使用这个确切的生成器函数的示例代码,这证明了不安全性,将不胜感激和奖励。
上述代码的目标是延迟异步序列的处理,而不施加任何背压。如果你能证明这段代码不像我期望的那样工作,那也将不胜感激。
谢谢你。
asynchronous - 在 Trio 中,如何在不等待的情况下将数据写入套接字?
在 Trio 中,如果您想将一些数据写入 TCP 套接字,那么显而易见的选择是send_all
:
请注意,这两者都通过套接字发送该数据并等待它被写入。但是如果你只是想将要发送的数据排队,而不是等待它被写入(至少,你不想在同一个协程中等待)呢?
在 asyncio 中这很简单,因为这两个部分是独立的函数:write()
和drain()
. 例如:
因此,当然,如果您只想写入数据而不是等待它,您可以直接调用write()
而不等待drain()
。Trio 中是否有等效的功能?我知道这种双功能设计是有争议的,因为它很难正确应用背压,但在我的应用程序中,我需要将它们分开。
现在我已经通过为每个连接创建一个专用的编写器协程并有一个内存通道来将数据发送到该协程来解决它,但是与在调用一个或两个函数之间进行选择相比,它是相当多的faff,而且它似乎是一个有点浪费(大概引擎盖下还有一个发送缓冲区,我的内存通道就像那个缓冲区顶部的缓冲区)。
asynchronous - 如何安全地关闭 Trio 中的连接?
我将连接的应用程序逻辑全部包裹在一个大的 try/except/finally 块中:
我不清楚是否应该尝试在 finally 子句中关闭连接。如果异常是由于应用程序错误(来自连接的无效消息,或协程被取消),这似乎是正确的做法,但如果异常是连接从另一端关闭,那么这似乎适得其反 - 我期望旧的异常会被新的异常掩盖。有什么想法吗?我也许可以将它包装在自己的 try/except 中,而忽略任何异常。
python - 三重奏与 Asyncio 和正确启动/关闭循环
所以我开始我的程序是这样的:
trio 协程函数的开头是这样的:
这是那个类:
我曾经能够结束程序,b.loop.close
但在三重奏运行时,它永远无法执行并引发 RuntimeError 将我的程序陷入某个无限循环,甚至在我关闭 powershell 窗口时都不会停止,这需要我从任务管理器。这已经解决了,os_exit()
但感觉就像我在躲避这个问题而不是纠正它。除非我大大修改了我正在使用的与 asyncio 一起运行的库,否则代码的 asyncio 部分大部分都无法更改。退出有什么大的缺点os._exit(0)
吗?有没有更好的方法让 Trio 和 Asyncio 一起运行?我想继续使用 Trio。
python - Python 和 Trio,生产者是消费者,工作完成后如何优雅退出?
我正在尝试trio
使用asks
. 我使用nursery 一次启动几个爬虫,并使用内存通道来维护要访问的url 列表。
每个爬虫都会接收该通道两端的克隆,因此它们可以获取一个 url(通过 receive_channel)、读取它、查找并添加要访问的新 url(通过 send_channel)。
在这种情况下,消费者是生产者。如何优雅地停止一切?
关闭一切的条件是:
- 频道为空
- 和
- 所有爬虫都卡在第一个 for 循环中,等待 url 出现在 receive_channel 中(这......不会再发生了)
async with send_channel
我在里面试过,crawler()
但找不到一个好方法。我还尝试找到一些不同的方法(一些内存通道绑定的工作池等),这里也没有运气。
python - 无法验证我对特定网站的查询
我正在尝试查询以下网站
其中Access Number
将是一个固定值8778791867
并且PIN
将是dynamic
。
从普通浏览器可以检查它是有效还是无效pin
。
但是使用下面的代码,我无法得到浏览器得到的确切答案。因为我一直对所有条目无效!
它应该返回 invalid for5418531366
和 valid for5418531367
但由于某种原因,我对这两个数字都无效:
以下响应为实际
HTML
响应。
提前致谢。
我想用硒来处理它。因为我也为此任务构建了一个硒脚本。
python - 如何防止孩子拆除整个托儿所引发的异常
考虑以下代码:
如何broken_fn
在不触及 的定义的情况下防止在托儿所中中止其兄弟姐妹所引发的异常broken_fn
?以下是最好的方法吗?
我还有其他选择吗?
python-trio - 在没有 BrokenResourceError 的情况下终止 trio 程序的正确方法
我的应用程序遵循生产者和消费者模式。有一个生产者,两个任务(A,B)和一个消费者。
生产者读取一个 sql 表并输出到 A 和 B。他们反过来对该输出执行一些任务并发送到消费者。消费者从 A & B 读取,然后输出到 s3 文件。
Producer&A、Producer&B、A&Consumer、B&Consumer之间有一个内存通道。
这就是我现在终止程序的方式(一旦生产者用尽了 SQL 表中的所有行):
这是 A & B 的基类:
现在,由于此错误,我的程序没有成功退出:
注意:第379 行引用了上面块break
中的最后一行。async with trio.open_nursery() as nursery
看来我终止程序的方式导致了这个问题。我已经在两个不同的场合运行过这个并且得到了同样的错误。
我应该如何在不导致此错误的情况下终止我的程序?
python - 我从朋友那里得到了一个 trio 输入函数,它正在尝试使用 trio.lowleve.FdStream,但是我找不到它
我收到此错误:AttributeError:模块“trio.lowlevel”没有属性“FdStream”。FdStream 不在 git 的三重奏代码中,也不在我的安装中。有没有替代方案,或者有没有我没有找到的不同版本?
python - python-trio echo server的确切版本是什么 - asyncio中的多个客户端?
我正在尝试将以下 echo server IRC 类似的聊天终端转换为 asyncio ,但我认为关于 trio 的信息并不多,因为它是新的,但是这个到 asyncio 的翻译是什么?