Introspeção do grafo de chamadas¶
Código-fonte: Lib/asyncio/grafo.py
O asyncio disponibiliza utilitários poderosos de introspeção do grafo de chamadas em tempo de execução, que permitem traçar o grafo de chamadas completo de uma corrotina ou tarefa em execução, ou de um futuro suspenso. Estes utilitários e a respectiva maquinaria subjacente podem ser utilizados em um programa Python ou por perfis externos e depuradores.
Adicionado na versão 3.14.
- asyncio.print_call_graph(future=None, /, *, file=None, depth=1, limit=None)¶
Exibe o grafo de chamadas assíncronas para a tarefa atual ou para a
TaskouFuturefornecida.Esta função exibe as entradas a partir do quadro superior até ao ponto de invocação.
A função recebe um argumento opcional future. Se não for fornecido, será utilizada a tarefa em execução atual.
Se a função for chamada na tarefa atual, o argumento opcional somente-nomeado depth pode ser usado para ignorar o número especificado de quadros a partir do topo da pilha.
Se o argumento opcional somente-nomeado limit for fornecido, cada pilha de chamadas no gráfico resultante será truncada para incluir no máximo
abs(limit)entradas. Se limit for positivo, as entradas exibidas serão as mais próximas do ponto de invocação. Se limit for negativo, as entradas mais altas são exibidas. Se limit for omitido ouNone, todas as entradas são apresentadas. Se limit for0, a pilha de chamadas não é exibida, apenas as informações “aguardadas por” são exibidas.Se file for omitido ou for
None, a saída da função será encaminhada parasys.stdout.Exemplo:
O seguinte código Python:
import asyncioasync def test(): asyncio.print_call_graph()async def main(): async with asyncio.TaskGroup() as g: g.create_task(test(), name='test')asyncio.run(main())
irá exibir:
* Task(name='test', id=0x1039f0fe0)+ Call stack:| File 't2.py', line 4, in async test()+ Awaited by: * Task(name='Task-1', id=0x103a5e060) + Call stack: | File 'taskgroups.py', line 107, in async TaskGroup.__aexit__() | File 't2.py', line 7, in async main()
- asyncio.format_call_graph(future=None, /, *, depth=1, limit=None)¶
Semelhante a
print_call_graph(), mas retorna uma string. Se future forNonee não houver nenhuma tarefa atual, a função retorna uma string vazia.
- asyncio.capture_call_graph(future=None, /, *, depth=1, limit=None)¶
Captura o grafo de chamadas assíncronas para a tarefa atual ou para a
TaskouFuturefornecida.A função recebe um argumento opcional future. Se não for fornecido, será utilizada a tarefa em execução atual. Se não existir nenhuma tarefa atual, a função retorna
None.Se a função for chamada na tarefa atual, o argumento opcional somente-nomeado depth pode ser usado para ignorar o número especificado de quadros a partir do topo da pilha.
Retorna um objeto da classe de dados
FutureCallGraph:FutureCallGraph(future, call_stack, awaited_by)FrameCallGraphEntry(frame)Onde frame é um objeto de quadro de uma função Python regular na pilha de chamadas.
Funções utilitárias de baixo nível¶
Para efetuar a introspeção de um grafo de chamadas assíncronas, o asyncio requer a cooperação de estruturas de controle de fluxo, como shield() ou TaskGroup. Sempre que um objeto Future intermediário com APIs de baixo nível, como Future.add_done_callback(), estiver envolvido, as duas funções seguintes devem ser utilizadas para informar o asyncio sobre a forma como esses objetos future intermédios estão ligados às tarefas que envolvem ou controlam.
- asyncio.future_add_to_awaited_by(future, waiter, /)¶
Registra que future está a ser aguardado por waiter.
Tanto future quanto waiter devem ser instâncias de
FutureouTaskou de suas subclasses; caso contrário, a chamada não terá efeito.Uma chamada a
future_add_to_awaited_by()deve ser seguida por uma chamada eventual à funçãofuture_discard_from_awaited_by()com os mesmos argumentos.