【发布时间】:2019-03-08 20:22:50
【问题描述】:
python 的 asyncio 似乎是一种孤注一掷的交易。具体来说,它似乎强制完整的调用堆栈是异步感知的。
这是一个例子:
假设有一个由函数a()实现的算法。
该算法调用函数b()。
def a(b):
for i in ...:
# do smth...
res = b()
# do smth more ...
现在让我们假设函数 b() 可能在不同的环境中以不同的方式实现,并且可能希望在异步事件循环中调用 a()(使用 loop.call_soon()) 和 b() 调用一些异步代码:
def b():
await .... # this forces b() to be declared async.
似乎明确禁止使用现有的事件循环... 那么,是否有方法可以在不强制将完整堆栈(a() 和 b())显式定义为异步协程的情况下实现此功能?
【问题讨论】:
-
It seems that python's asyncio is an all-or-nothing kind of deal. Specifically it seems to force full call stack to be async-aware.-- 是的。所有async的栈都是这样的。 -
Gevent 提供了更多的灵活性。我喜欢它的一点是,您不必编写异步代码来使其异步。特别是 WSGI 的东西。只需一个简单的 spawn 即可使其异步。
标签: python python-asyncio