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

python - Tulip/asyncIO:为什么不是所有的调用都是异步的并指定什么时候应该是同步的?

当 Guido谈到Tulip 时,我参加了 SF Python 聚会,Tulip 是 Python 中用于异步操作的未来 asyncIO 库。

要点是,如果您想要异步运行某些东西,您可以使用"yield from" + expression和几个装饰器来指定对后面的调用yield from应该异步执行。关于它的好处是您可以正常读取该函数中的语句(好像它是同步的),并且它的行为就好像它对于该函数的执行是同步的(返回值和错误/异常传播和处理)。

我的问题是:为什么不采取相反的行为,即所有函数调用默认为异步(并且没有yield from),并且当您想要同步执行某些内容时具有不同的显式语法?

(除了需要另一个关键字/语法规范)

0 投票
1 回答
11622 浏览

python - Python asyncio、futures 和 yield from

考虑以下程序(在 CPython 3.4.0b1 上运行):

我有 2 个(相关)问题:

  1. 即使使用了装饰器fast_sqrt,Python 似乎也完全优化了创建的 Future fast_sqrt,并返回了一个纯float文本。然后run_test()yield from

  2. 为什么我需要进行评估future.result()run_test检索引发异常的值?文档说“yield from <future>暂停协程直到未来完成,然后返回未来的结果,或者引发异常”。为什么我需要手动检索未来的结果?

这是我得到的:

好的,我找到了“问题”。yield from asyncio.sleepin将slow_sqrt自动使其成为协程。等待需要以不同的方式完成:

所有 4 个变体都在这里

0 投票
2 回答
778 浏览

python - 也许延迟模拟与 asyncio

我正在编写一个框架,该框架将调用用户提供的函数。

我想允许使用提供的函数是以下任何一种:

  • 一个简单的函数
  • 一个函数返回asyncio.Future
  • 一个asyncio.coroutine

即用户函数既可以是同步的,也可以是异步的,框架事先并不知道,但需要应对所有的变体。

Twisted为此 defer.maybeDeferred。会有什么asyncio办法?

我有类似以下的内容(完整代码在这里):

然后f在框架中像这样调用用户提供的函数:

这将任何普通函数返回值包装到-alwaysFuture中。我对此表现或其他影响持谨慎态度。

是上面的“推荐”方式吗?

此外,上述代码的“内联”版本没有这种开销。我怎样才能达到两者的最佳状态:“普通”情况下没有开销,但在整个框架中检查异步返回时没有代码重复?

0 投票
2 回答
5022 浏览

python - 在 asyncio.Protocol.data_received 中调用协程

我在asyncio.Protocol.data_received新 Python asyncio模块的回调中执行异步操作时遇到问题。

考虑以下服务器:

与以下客户端一起使用:

随着self.fast_sqrt被调用,一切都按预期工作。

self.slow_sqrt它不起作用。

它也不适用于self.fast_sqrt@asyncio.coroutine装饰器data_received

我觉得我在这里遗漏了一些基本的东西。

完整代码在这里:

经测试:

  • Python 3.4.0b1 (Windows)
  • Python 3.3.3 + asyncio-0.2.1 (FreeBSD)

两者的问题都是一样的:使用slow_sqrt,客户端/服务器将无所事事地挂起。

0 投票
3 回答
28605 浏览

python - 将 asyncio 与多处理结合起来会出现什么样的问题(如果有的话)?

几乎每个人在第一次看到 Python 中的线程时都知道,对于那些真正想要并行处理的人来说,GIL 让他们的生活变得悲惨——或者至少给它一个机会。

我目前正在考虑实现类似 Reactor 模式的东西。实际上,我想在一个类线程上监听传入的套接字连接,当有人尝试连接时,接受该连接并将其传递给另一个类线程进行处理。

我(还)不确定我可能面临什么样的负载。我知道目前对传入消息设置了 2MB 的上限。从理论上讲,我们每秒可以得到数千(尽管我不知道实际上我们是否见过类似的东西)。处理消息所花费的时间并不是重要,但显然越快越好。

我正在研究 Reactor 模式,并使用该multiprocessing库开发了一个小示例,该库(至少在测试中)似乎工作得很好。但是,现在/很快我们将提供可用的asyncio库,它将为我处理事件循环。

有什么可以通过结合asyncio和来咬我的东西multiprocessing吗?

0 投票
1 回答
3233 浏览

python - 如何在 Python 中使用 tulip/asyncio 创建中继服务器?

我有示例回声服务器

我想要做的是添加一个我评论过的客户端,它将连接到一个新的服务器并以这种方式发送数据。有echo client,但我需要一个看起来像这样的过程:

显然我可以同步执行此操作,但我正在尝试使client -> other server位异步,并且我并没有真正弄清楚如何使用这些asyncio方法在我的服务器部件和客户端部件之间进行通信。

我需要在这里做什么?

0 投票
8 回答
19157 浏览

python - 在 python3 asyncio 中使用串口

我正在尝试,到目前为止,未能使用 python asyncio 访问串行端口。

我非常感谢在简单 fd 上使用新的 python 异步框架的任何提示。

干杯!

詹姆士

0 投票
2 回答
2302 浏览

python - 为什么 asyncio.open_connection (或任何其他协程)会阻止 data_received 处理?

我从asyncio 文档中稍微修改了以下代码

但是,当我运行它时,它似乎甚至没有运行data_received函数:

但是当我注释掉这yield from条线时,它会按照我期望的方式运行。

我试过添加:

try_stuff而是打电话。这确实会输出“正在建立连接”,但不会输出“正在尝试”。通过将yield from线路更改为简单的调用确实会输出“正在尝试”。如果我从中删除协程装饰器,do_a_thing我会得到输出。

对我来说重要的是我正在尝试创建到第二台服务器的异步连接。但显然,存在yield from阻止了任何进一步的处理(至少我可以说 - 它肯定会随着打印而停止)。

那么我做错了什么,我该如何解决这个问题?

0 投票
1 回答
1307 浏览

sockets - 异步项目。我错过了什么?

我一直在为这个聊天服务器开发一个客户端,但我遇到了一些挑战。服务器使用 Python 的 3.4RC1 asyncio 模块。

行为:

我的客户连接。我的第二个客户连接。两者都可以向服务器发送消息,但是服务器没有像在普通公共聊天室中那样广播它们。

用户1:你好。按 Enter。

用户 2 没有看到它。

用户2:有人吗?按 Enter。

用户 2 看到用户 1:您好。和用户 2:有人吗?

只是……奇怪。不知道我错过了什么。

这是文件。试试看。

服务器:

客户:

这是我编写的非线程服务器代码。效果很好,但只能在 2 人之间。如何更新此代码以将收到的每条消息广播给所有连接的客户端?

0 投票
1 回答
700 浏览

python - 安装 asyncio backport trollius 时出现 gcc 错误(Python 2.7.5 和 Win7)

我无法安装 asyncio backport trollius。从文档中,我必须:“...首先构建 _overlapped.pyd 扩展名(它将放置在 asyncio 目录中):”

未声明的变量和类型名称。我认识小C,我在这里错过了什么?