linux-BR.org

Notícias de software livre e tecnologias

Em vez de chamar a instância.shutdown (), a linha bytecode dois faria algo como adiar (lambda: instance.shutdown ()).Felizmente, eu tenho brincado com um monte com a excelente biblioteca de feitiçaria da @Alexmojaki e a execução subjacente, e por acaso é perfeito para essa marca em particular de abuso.Ao combinar isso com sys.Settrace (), podemos pegar a primeira chamada para adiar e criar uma pilha de finalizadores locais de função.Tudo o que resta é transformar o AST como descrevemos acima, compilar a nova função e trocar a propriedade __code__ do original.Em seguida, pegamos essa pilha e a embrulhamos em uma função de rastreamento infantil, que anexamos à função via foo.f_trace.

Fonte: https://musings.yasyf.com/bringing-gos-defer-to-python/