背景:我是一位经验丰富的Python程序员,对新的协程/异步/等待功能一无所知。我无法编写一个异步的“ hello world”来挽救生命。
我的问题是:给我一个任意协程函数f。我想编写一个g将包装的协程函数f,即我将给g用户,就像它是一样f,并且用户将调用它,而没有人会更明智,因为g将在后台使用f。就像装饰普通的Python函数以添加功能时一样。
我要添加的功能:每当程序流进入协程时,它都会获取我提供的上下文管理器,一旦程序流离开协程,它将释放该上下文管理器。流量又回来了吗?重新获取上下文管理器。它退出了吗?重新释放它。直到协程完全完成。
为了演示,这是使用普通生成器描述的功能:
def generator_wrapper(_, *args, **kwargs):
gen = function(*args, **kwargs)
method, incoming = gen.send, None
while True:
with self:
outgoing = method(incoming)
try:
method, incoming = gen.send, (yield outgoing)
except Exception as e:
method, incoming = gen.throw, e
Run Code Online (Sandbox Code Playgroud)
有可能用协程吗?