问题标签 [python-asyncio]

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 回答
586 浏览

python - 使用 asyncio 的程序结构

我目前有一个结构如下的程序:

网络 I/O 目前使用套接字和选择,但我想重写它以使用 asyncio 库。我想我了解如何制作一个简单的 asyncio 程序,这个想法似乎是当你想做一些 I/O 时,你yield from有一个函数来做它,所以当主循环得到一个新的客户端时,它会做yield from accept_client(),当该客户端接收到的信息yield from read_information(),依此类推。但是,我不知道如何将它与程序的其他部分结合起来。

0 投票
3 回答
15812 浏览

python - 使用 asyncio 的非阻塞 I/O

我正在尝试使用 Pygame 和 asyncio 编写一个网络游戏,但我不知道如何避免挂起读取。这是我的客户代码:

这就挂了line = yield from reader.read(2**12)。我之前认为 asyncio 的意义在于它是非阻塞的,因此如果没有任何数据要读取,它就会继续执行。我现在看到情况并非如此。

如何将 asyncio 网络代码与 Pygame 绘图和事件代码集成?

0 投票
1 回答
3595 浏览

python - 学习/理解 Python 的 asyncio 的资源

TLDR:我正在为应用程序开发人员寻找关于 asyncio 的全面或权威的解释(教程/书籍/演示文稿/...)。

虽然我对事件循环和futures/deferreds/promise 有很好的理解(很大程度上要感谢JavaScript),但Python 的asyncio 的复杂性仍然让我感到困惑。asyncio 似乎比我习惯的要复杂得多——大概是因为它部分设计用于与现有实现(Twisted、Tornado 等)的低级别兼容性,并且因为它允许在单独的线程中进行多个事件循环。

据我所知,基本概念没有全面的演练,所以我查阅了官方文档以及网络上的各种文章演示文稿

然而我仍然不确定我的理解,很可能是因为在应用程序级别并不总是清楚什么是相关的,或者您是否不需要担心上述替代方案。(许多资源似乎假设熟悉 Twisted 等人。)

一些给我带来不确定性的例子:

  • 到目前为止,我只asyncio.coroutine与 结合使用yield from,但这种比较表明我应该重新考虑。
  • 可以使用loop.create_server(MyProtocol)或创建服务器asyncio.start_server(my_connection_handler)- 我什么时候使用?
  • 管理循环生命周期(例如loop.close()之后loop.run_forever())的适当卫生是什么?
  • 我还没有理解为什么Task除了 s 之外还需要Futures。
  • 如果我希望类构造函数是非阻塞的(即 use yield from,这似乎是无效的)怎么办?
  • 类 getter 可以是异步的(即组合@propertyand asyncio.coroutine)吗?
  • 我如何知道任何给定的函数是否是异步的?例如,我希望StreamWriter.write是非阻塞的,但我不知道事实是否如此。

我不是在要求这些特定问题的答案,它们只是说明我在概念层面上是如何挣扎的。

0 投票
1 回答
913 浏览

python - Autobahn Application Runner 未运行应用程序

我对 Autobahn 和 WAMP(Web 应用程序消息传递协议)很陌生。

我只是基于http://autobahn.ws/python/wamp/programming.htmlhttps://github.com/crossbario/crossbarexamples/blob/master/votes/python/votes.py创建一个简单的应用程序组件

下面是我的服务器端 Python

和客户端

错误

在此处输入图像描述

看起来这类似于https://github.com/hwmrocker/hextest/issues/2但我无法理解。我什至找不到有效的样本。这个(https://github.com/tavendo/AutobahnPython/tree/master/examples/asyncio/wamp/wamplet/wamplet1)是相似的,但它也有同样的问题。

令人惊讶的是,当我在同一个端口上运行外部 Crossbar 示例并运行上面的示例时,它就像魔术一样工作,我可以在控制台上看到结果。

我找到了这个(https://github.com/tavendo/AutobahnPython/blob/master/examples/asyncio/wamp/basic/server.py),但它看起来相当复杂。

请帮帮我。

谢谢你的高级。

0 投票
7 回答
53477 浏览

python - 使用 asyncio 时,如何让所有正在运行的任务在关闭事件循环之前完成

我有以下代码:

我运行这个函数直到完成。设置关闭时会出现问题 - 功能完成并且任何挂起的任务都不会运行。

这是错误:

如何正确安排关机?

为了给出一些上下文,我正在编写一个系统监视器,它每 5 秒从 /proc/stat 读取一次,计算该期间的 cpu 使用率,然后将结果发送到服务器。我想继续安排这些监控作业,直到我收到 sigterm,当我停止安排时,等待所有当前作业完成,然后优雅地退出。

0 投票
1 回答
1920 浏览

python - Python3.4 SSLV3 与 asyncio、aiohttp 握手失败

下面的代码有问题,SSLV3 握手失败:

堆栈跟踪:

我在 Mac OSX 10.9.5,Python 版本上:

OpenSSL 似乎没问题,我可以按如下方式进行连接:

我怀疑在创建 ssl 上下文时我没有正确执行某些操作。请问有什么想法吗?

0 投票
1 回答
252 浏览

python - 向异步传输添加方法

是否可以向标准异步传输添加新方法?

例如:向 SSL 传输添加一个 send 方法,该方法序列化协议缓冲区,构造一个帧并使用传输自己的 write 方法对底层套接字进行缓冲写入。

那里有很多异步服务器/客户端示例,但我无法找到实现自己的传输或扩展现有传输的示例。

0 投票
1 回答
1579 浏览

python - 设置未来后的 asyncio.run_until_complete 块

我正在python3中学习asyncio,我写了一个简单的RPC服务器和客户端来学习,但是当我用asyncio.run_until_complete测试它时,它在future已经设置后阻塞,代码如下,检查主要部分。我正在使用 python 3.4.2

功能是计算 3+5,当我运行程序时,它会在 data_received 中正确显示结果,如

未来结果:8

但是之后程序阻塞,从不显示最终结果,future设置成功但函数不返回,这是为什么呢?

如果您想运行它,服务器端附在下面

0 投票
3 回答
1517 浏览

python - python 3 asyncio中是否有类似socket.recv_into的操作?

Socket 模块有一个socket.recv_into方法,因此它可以使用用户定义的bytebuffer(如bytearray)进行零拷贝。但也许BaseEventLoop没有那样的方法。有没有办法使用像socket.recv_intoasyncio 这样的方法?

0 投票
2 回答
7792 浏览

python - 动态添加到 Python asyncio 的事件循环应该执行的列表

我有一个函数 download_all 遍历硬编码的页面列表以按顺序下载它们。但是如果我想根据页面的结果动态添加到列表中,我该怎么做呢?例如下载第一个页面,解析它,然后根据结果将其他页面添加到事件循环中。