|
发表于 2020-9-28 19:14:24
|
显示全部楼层
本帖最后由 Stubborn 于 2020-9-28 19:16 编辑
顺序没有毛病,遇到函数执行,就往函数钻,直到函数返回结果。
脑补一下,这个运行过程
- def apply_async(function, args, *, callback):
- result = function(*args)
- callback(result)
- from queue import Queue
- from functools import wraps
- class Async:
- def __init__(self, function, args):
- self.function = function
- self.args = args
- def in_lined_async(function):
- @wraps(function)
- def wrapper(*args):
- f = function(*args)
- result_queue = Queue()
- result_queue.put(None)
- while True:
- result = result_queue.get()
- try:
- a = f.send(result)
- apply_async(a.function, a.args, callback=result_queue.put)
- except StopIteration:
- break
- return wrapper
- def add(x, y):
- return x+y
- @in_lined_async
- def test():
- y = yield Async(add, (2, 3))
- print(y)
- y = yield Async(add, ("Hello ", "World"))
- print(y)
- for n in range(5):
- y = yield Async(add, (n, n))
- print(y)
- print("Goodbye")
- test()
复制代码 |
|