【发布时间】:2018-09-11 01:06:07
【问题描述】:
我正在使用一个不进行 i/o 的非异步库,只进行简单的计算。它的一个特点是对一组用户提供的观察者按发生顺序进行一系列回调,而用户控制更高级别的 api。
class Calculator:
def __init__(self):
self._internal = 0
self._observers = [
def register(observer):
self._observers.append(observer)
def add(int val):
for i in range(val):
self._internal += 1
def _call_observers(self):
for o in self._observers:
o.on_add()
@property
def value(self):
return self._internal
我需要从协程中使用它来调用其他协程。我的一个想法是继承 AsyncCalculator 并将相关方法重写为协程,存储对事件循环的引用。
(不是真正的代码)
class AsyncCalculator(Calculator):
def __init__(self, loop):
...
async def _call_observers(self):
...
我想知道如果有对事件循环或任何其他可用结构的引用,是否有办法从普通函数等待协程?似乎如果该函数是从协程调用的,那么可能有一些骇人听闻的方法来等待来自该函数的另一个协程。那么也许这个 hack 可以被扔进一个实用程序中?
【问题讨论】:
标签: python-asyncio