concurrent.interpreters
— Múltiplos interpretadores no mesmo processo¶
Adicionado na versão 3.14.
Código-fonte: Lib/concurrent/interpreters.py
Introdução¶
O módulo concurrent.interpreters
constrói interfaces de nível mais alto sobre o módulo de mais baixo nível _interpreters
.
Ver também
- Isolando módulos de extensão
como atualizar um módulo de extensão para oferecer suporte a vários interpretadores
Disponibilidade: not WASI.
Este módulo não funciona ou não está disponível em WebAssembly. Veja Plataformas WebAssembly para mais informações.
Detalhes-chave¶
Antes de mergulharmos nos exemplos, há alguns detalhes a serem lembrados sobre o uso de múltiplos interpretadores:
isolados, por padrão
nenhuma thread implícita
nem todos os pacotes PyPI oferecem suporte ao uso em múltiplos interpretadores ainda
No contexto de múltiplos interpretadores, “isolados” significa que diferentes interpretadores não compartilham nenhum estado. Na prática, há alguns dados globais do processo que todos eles compartilham, mas isso é gerenciado pelo tempo de execução.
Referência¶
Este módulo define as seguintes funções:
- concurrent.interpreters.list_all()¶
Retorna
list
de objetosInterpreter
, um para cada interpretador existente.
- concurrent.interpreters.get_current()¶
Retorna um objeto
Interpreter
para o interpretador em execução no momento.
- concurrent.interpreters.get_main()¶
Retorna um objeto
Interpreter
para o interpretador principal.
- concurrent.interpreters.create()¶
Inicializa um novo interpretador Python (ocioso) e retorna um objeto
Interpreter
para ele.
Objetos interpretador¶
- class concurrent.interpreters.Interpreter(id)¶
Um único interpretador no processo atual.
Geralmente,
Interpreter
não deve ser chamado diretamente. Em vez disso, usecreate()
ou uma das outras funções do módulo.- id¶
(somente leitura)
O ID do interpretador.
- whence¶
(somente leitura)
Uma string descrevendo de onde o interpretador veio.
- is_running()¶
Retorna
True
se o interpretador estiver executando código em seu módulo__main__
eFalse
caso contrário.
- close()¶
Finaliza e destrói o interpretador.
- prepare_main(ns=None, **kwargs)¶
Liga objetos “compartilháveis” no módulo
__main__
do interpretador.
- exec(code, /, dedent=True)¶
Executa o código-fonte fornecido no interpretador (na thread atual).
- call(callable, /, *args, **kwargs)¶
Retorna o resultado da chamada da execução da função fornecida no interpretador (na thread atual).
- call_in_thread(callable, /, *args, **kwargs)¶
Executa a função fornecida no interpretador (em uma nova thread).
Exceções¶
- exception concurrent.interpreters.InterpreterError¶
Esta exceção, uma subclasse de
Exception
, é levantada quando ocorre um erro relacionado ao interpretador.
- exception concurrent.interpreters.InterpreterNotFoundError¶
Esta exceção, uma subclasse de
InterpreterError
, é levantada quando o interpretador de destino não existe mais.
- exception concurrent.interpreters.ExecutionFailed¶
Esta exceção, uma subclasse de
InterpreterError
, é levantada quando o código em execução levanta uma exceção não capturada.- excinfo¶
Um snapshot básico da exceção levantada no outro interpretador.
Esta exceção, uma subclasse de
TypeError
, é levantada quando um objeto não pode ser enviado para outro interpretador.
Uso básico¶
Criando um interpretador e executando código nele:
from concurrent import interpreters
interp = interpreters.create()
# Executa na thread atual do sistema operacional.
interp.exec('print("spam!")')
interp.exec("""if True:
print('spam!')
""")
from textwrap import dedent
interp.exec(dedent("""
print('spam!')
"""))
def run():
print('spam!')
interp.call(run)
# Executa uma nova thread do sistema operacional.
t = interp.call_in_thread(run)
t.join()