asyncio:如何组合同步代码而不强制完全暴露于asyncio

问题描述 投票:2回答:1

似乎python的asyncio是一种全有或全无的交易。特别是它似乎强制完全调用堆栈是异步感知。

这是一个例子:

假设有一个由函数a()实现的算法。 该算法调用函数b()。

def a(b):
  for i in ...:
    # do smth...
    res = b()
    # do smth more ...

现在让我们假设函数b()可能在不同的环境中以不同的方式实现,并且可能想要在异步事件循环(使用loop.call_soon())中调用a(),并使用b()调用一些asyncio感知代码:

def b():
   await .... # this forces b() to be declared async.

使用现有的事件循环似乎是明确禁止的...那么,是否有方法来实现此功能而不强制将完整堆栈(a()和b())显式定义为async协同程序?

python python-asyncio
1个回答
0
投票

尽管从表面上看,asyncio是一种全有或全无的交易,但在处理遗留或异构环境时,仍有两个逃脱舱口可以帮助:

有了这两个工具,将asyncio和经典同步代码混合起来并不难。

© www.soinside.com 2019 - 2024. All rights reserved.