小编典典

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

python

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

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

我的问题是:为什么不具有相反的行为,也就是说,yield from当您要同步执行某些操作时,默认情况下所有函数调用都是异步的(并且没有),并且具有不同的显式语法吗?

(除了需要其他关键字/语法规范)


阅读 140

收藏
2021-01-16

共1个答案

小编典典

真正的答案是Guido 喜欢 在协程中显式显示异步屈服点这一事实,因为如果您没有意识到调用可以屈服,那么这将引发并发问题-
例如线程。但是,如果必须编写一个explicit yield from,则很容易确保它不会落在对代码的其余部分应该是原子的两个关键操作的中间。

正如他在PyCon2013主题演讲中提到的那样,还有其他Python异步框架,如Gevent,默认情况下是异步的,他不喜欢这种方法。(在11:58):

不幸的是,您仍不能完全解决调度程序可能在随机时刻中断您的任务并切换到另一任务的问题。[…]您今天调用的任何函数都碰巧知道它永远不会切换,明天有人可以添加日志记录语句或延迟缓存或查阅设置文件。[…]

2021-01-16