问题标签 [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.
python - 使用 asyncio 的程序结构
我目前有一个结构如下的程序:
网络 I/O 目前使用套接字和选择,但我想重写它以使用 asyncio 库。我想我了解如何制作一个简单的 asyncio 程序,这个想法似乎是当你想做一些 I/O 时,你yield from
有一个函数来做它,所以当主循环得到一个新的客户端时,它会做yield from accept_client()
,当该客户端接收到的信息yield from read_information()
,依此类推。但是,我不知道如何将它与程序的其他部分结合起来。
python - 使用 asyncio 的非阻塞 I/O
我正在尝试使用 Pygame 和 asyncio 编写一个网络游戏,但我不知道如何避免挂起读取。这是我的客户代码:
这就挂了line = yield from reader.read(2**12)
。我之前认为 asyncio 的意义在于它是非阻塞的,因此如果没有任何数据要读取,它就会继续执行。我现在看到情况并非如此。
如何将 asyncio 网络代码与 Pygame 绘图和事件代码集成?
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 之外还需要Future
s。 - 如果我希望类构造函数是非阻塞的(即 use
yield from
,这似乎是无效的)怎么办? - 类 getter 可以是异步的(即组合
@property
andasyncio.coroutine
)吗? - 我如何知道任何给定的函数是否是异步的?例如,我希望
StreamWriter.write
是非阻塞的,但我不知道事实是否如此。
我不是在要求这些特定问题的答案,它们只是说明我在概念层面上是如何挣扎的。
python - Autobahn Application Runner 未运行应用程序
我对 Autobahn 和 WAMP(Web 应用程序消息传递协议)很陌生。
我只是基于http://autobahn.ws/python/wamp/programming.html和https://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),但它看起来相当复杂。
请帮帮我。
谢谢你的高级。
python - 使用 asyncio 时,如何让所有正在运行的任务在关闭事件循环之前完成
我有以下代码:
我运行这个函数直到完成。设置关闭时会出现问题 - 功能完成并且任何挂起的任务都不会运行。
这是错误:
如何正确安排关机?
为了给出一些上下文,我正在编写一个系统监视器,它每 5 秒从 /proc/stat 读取一次,计算该期间的 cpu 使用率,然后将结果发送到服务器。我想继续安排这些监控作业,直到我收到 sigterm,当我停止安排时,等待所有当前作业完成,然后优雅地退出。
python - Python3.4 SSLV3 与 asyncio、aiohttp 握手失败
下面的代码有问题,SSLV3 握手失败:
堆栈跟踪:
我在 Mac OSX 10.9.5,Python 版本上:
OpenSSL 似乎没问题,我可以按如下方式进行连接:
我怀疑在创建 ssl 上下文时我没有正确执行某些操作。请问有什么想法吗?
python - 向异步传输添加方法
是否可以向标准异步传输添加新方法?
例如:向 SSL 传输添加一个 send 方法,该方法序列化协议缓冲区,构造一个帧并使用传输自己的 write 方法对底层套接字进行缓冲写入。
那里有很多异步服务器/客户端示例,但我无法找到实现自己的传输或扩展现有传输的示例。
python - 设置未来后的 asyncio.run_until_complete 块
我正在python3中学习asyncio,我写了一个简单的RPC服务器和客户端来学习,但是当我用asyncio.run_until_complete测试它时,它在future已经设置后阻塞,代码如下,检查主要部分。我正在使用 python 3.4.2
功能是计算 3+5,当我运行程序时,它会在 data_received 中正确显示结果,如
未来结果:8
但是之后程序阻塞,从不显示最终结果,future设置成功但函数不返回,这是为什么呢?
如果您想运行它,服务器端附在下面
python - python 3 asyncio中是否有类似socket.recv_into的操作?
Socket 模块有一个socket.recv_into
方法,因此它可以使用用户定义的bytebuffer
(如bytearray
)进行零拷贝。但也许BaseEventLoop
没有那样的方法。有没有办法使用像socket.recv_into
asyncio 这样的方法?
python - 动态添加到 Python asyncio 的事件循环应该执行的列表
我有一个函数 download_all 遍历硬编码的页面列表以按顺序下载它们。但是如果我想根据页面的结果动态添加到列表中,我该怎么做呢?例如下载第一个页面,解析它,然后根据结果将其他页面添加到事件循环中。