问题标签 [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 回答
346 浏览

python-3.x - 启动管理多个 TCP 连接的 Trio 服务器的正确方法

我最近完成了一个混合使用 Django 和 Twisted 的项目,并意识到它对于我需要的东西来说太过分了,这基本上只是我的服务器通过 TCP 套接字进行通信的一种方式。我转向三重奏,到目前为止,我喜欢我所看到的,因为它更直接(对于我需要的)。尽管如此,我只是想确保我以正确的方式做这件事。

我遵循了教授基础知识的教程,但我需要一个可以同时处理多个客户端的服务器。为此,我想出了以下代码

我的问题似乎是每个周期都在每个周期ServerProtocol运行listen,而不是等待数据可用。

在这种情况下,我感觉我使用 Trio 错误,是否有我遗漏的 Trio 最佳实践?

0 投票
3 回答
1966 浏览

pytest - 同时运行测试

我想使用 asyncio (/curio/trio) 和 pytest 同时运行几个测试,但我找不到任何相关信息。我需要自己安排吗?如果我这样做了,有没有办法有一个很好的输出来分隔(子)测试用例?

这是我正在尝试的一个小玩具示例:

0 投票
2 回答
274 浏览

python - python web从url列表中抓取

我是 python 中的 ask 和 trio 的新手,我有一个示例代码。让我解释一下,我有一个 URL 列表,每个 URL 都是新闻 URL,每个 URL 都有子 URL。第一个 url 请求并获取所有其他 href 并添加到列表中。然后获取该列表中所有hrefs的文章。问题是某些时候文章变得空洞。

在其工作时尝试了单个 url 的示例代码

获取文章数据不遗漏

0 投票
1 回答
136 浏览

python - 如何将 python-trio 与谷歌协议缓冲区一起使用?

我正在尝试在 python 中使用 protobuf 读取一些数据流,并且我想使用 trio 使客户端用于读取流。protobuf 有一些方法调用,当我使用 trio 流时,我发现它们不起作用。

Linux 机器上的 Python 客户端。

m_body将是一些字节数据,我不知道如何解码。Dtc.EncodingResponse()是 protobuf 方法,它会给出一个包含可读格式响应的 Dtc 对象。(Dtc 是 protobuf 文件)。但我在这里什么也得不到。当我在没有三重奏的情况下执行此脚本时,Dtc.EncodingResponse()将以可读的格式给出完整的响应。

我猜问题是“client_stream”是一个只读取字节的三重流对象,所以我可能需要使用一个ReceiveChannel对象。但如果这是真的,我不知道该怎么做。

更新: Nathaniel J. Smith 下面的答案解决了我的问题。

我觉得很傻,但是我之前没有 ParseFromString 数据,仅此而已。非常感谢所有回复的人。希望这可以帮助那里的人。

0 投票
2 回答
525 浏览

python - 如何手动退出无限三重奏循环,如三重奏的教程回显客户端

有没有办法手动退出三重奏无限循环,例如三重奏教程中的回声客户端,https://trio.readthedocs.io/en/latest/tutorial.html#an-echo-client,除了使用Ctrl-C或使用超时?

我的想法是使用从另一个 python 脚本调用 echo 客户端,并且能够使用相同的 python 脚本任意关闭它。我正在考虑使用标志(也许是事件?)作为触发cancel_scope.cancel()托儿所的开关。但我不知道如何触发开关。下面是我修改教程回显客户端代码的尝试。

我发现我无法在 python REPL 之后输入任何命令trio.run()来手动更改,并且想知道我是否从另一个脚本调用此 echo 客户端,如何在托儿所中FLAG准确触发?cancel_scope.cancel()或者,还有更好的方法?非常感谢所有帮助。谢谢。

0 投票
2 回答
307 浏览

python-trio - 如何使用 trio 构建开始和结束同步调用?

我的要求是结构化的 trio 伪代码(实际的 trio 函数调用,但 dummy worker-does-work-here 填充),以便我可以理解并尝试在同步和异步进程之间切换的良好流控制实践。

我想做以下...

  • 将 json-data 文件加载到 data-dict 中
    • 另外:数据字典看起来像 { 'key_a': {(info_dict_a)}, 'key_b': {info_dict_b} }
  • 让每个 n 个工人...
    • 访问该数据字典以查找下一个要处理的记录信息字典
    • 从正在处理的记录中准备一些数据并将数据发布到 url
    • 处理后响应以更新正在处理的记录信息字典中的“响应”键
    • 使用密钥的 info-dict 更新 data-dict
    • 用更新的 data-dict 覆盖 json-data 的原始文件

旁白:我知道除了笨拙地重复重写 json 文件之外,还有其他方法可以实现我的总体目标——但我不是要求输入;我真的很想很好地理解三重奏,以便能够将它用于流程。

所以,我想要同步的过程:

  • 获取下一条记录到处理信息字典
  • 数据字典的更新
  • 用更新的 data-dict 覆盖 json-data 的原始文件

三重奏的新手,我在这里有工作代码......我相信这同步获取下一个记录到处理(通过使用 trio.Semaphore() 技术)。但我很确定我没有同步保存文件。

几年前学习 Go 时,我觉得我摸索了交织同步和异步调用的方法——但还没有三重奏。提前致谢。

0 投票
1 回答
187 浏览

python - Python Trio 设置十进制数的工人

我正在与 trio 一起运行异步并发任务,该任务将在不同的网站上进行一些网络抓取。我希望能够选择与多少并发工作人员一起分配任务。为此,我编写了这段代码

在此示例to_check()中,等于提供了多少个 url 来从中获取数据,并且module().workers等于我想使用多少个并发工作人员。

因此,如果我假设我有 30 个 url,并且我输入我想要 10 个并发任务,它将同时从 10 个 url 获取数据并重复该过程 3 次。

现在这一切都很好,直到我Total_to_check(等于 url 的数量除以工人的数量)是小数。如果我假设 15 个 url 并且我要求 10 个工人,那么这段代码只会检查 10 个 url。如果我有 20 个网址但要求 15 名工人也是如此。我可以做类似 math.ceil(Total_to_check) 的事情,但它会开始尝试检查不存在的网址。

我怎样才能使它正常工作,所以如果我有 10 个并发任务和 15 个 url,它将同时检查前 10 个,然后同时检查最后 5 个而不跳过 url?(或试图检查太多)

谢谢!

0 投票
1 回答
276 浏览

python-3.x - 使用 trio asks 的请求返回与 requests 和 aiohttp 不同的响应

对,你好,所以我正在尝试使用 trio 和询问( https://asks.readthedocs.io/ )用我的 web 应用程序实现 opticard(忠诚卡服务)。

所以我想向他们的查询 api 发送一个请求:这里使用请求:

这将返回“Invalid ReCaptcha”,这是正常的,也是我想要的

使用 aiohttp 也是一样的:

现在这也返回“无效的 ReCaptcha”,所以这一切都很好。

但是现在,使用三重奏/询问:

这将返回一个完全不同的响应,“您的会话已过期以保护您的帐户。请重新登录。',当输入一个无效的url例如' https://merchant.opticard.com/do_inquiry.asp '而不是' https://merchant.opticard.com/public时可以正常访问此错误/消息/do_inquiry.asp '。

我不知道这个错误是从哪里来的,我尝试设置标头、cookie、编码,但似乎没有任何效果。我尝试复制该问题,但我设法使用 aiohttp 和 requests 复制结果的唯一方法是设置一个不正确的 URL,例如“ https://merchant.opticard.com/do_inquiry.asp ”而不是“ https://merchant .opticard.com/public/do_inquiry.asp '。

这一定是询问的问题,可能是由于编码或格式化,但我已经使用询问一年多了,并且从未遇到过与其他任何地方相比,带有数据的简单发布请求在询问上的返回不同的问题。而且我很困惑,因为我不明白为什么会发生这种情况,这不可能是询问部分的格式错误,因为如果是这样,为什么这是在使用它结束后第一次发生这样的事情一年?

0 投票
1 回答
263 浏览

python - trio.open_process 和 trio.run_process 给出属性错误

我正在尝试创建一个异步子进程并将一个变量传递给标准输入,但 trio.run_process 和 trio.open_process 都给出了属性错误。它没有指定导致错误的原因。

我也尝试过使用 trio.Process ,stdin=io.BytesIO(password)但这会产生 io.UnsupportedOperation 错误。仅传递字节也会产生错误。

功能是:

0 投票
1 回答
289 浏览

python - 我怎么能用三重奏异步读取文件的特定行

所以我想用三重奏(异步)打开文件,然后由于文件相当大,读取它的单个特定行

所以在“普通”同步python中,我会做这样的事情:

这将打印文件第二行的内容

现在的问题是,当使用 trio 的 open_file 方法时,enumerate(f)返回错误: TypeError: 'AsyncIOWrapper' object is not iterable

并遵循文档:

将只返回 i 的行值,并且只返回行的空格

那么,如何使用 trio/asynchronoulsy 在不丢失大量内存的情况下读取大文件的特定行?