Programação  
 
Conhecimento computador >> Programação >> Programação Python >> 
O que é um Python GIL
? Se você tem vindo a trabalhar com Python e quer começar a experimentar com mais técnicas de programação avançadas , aprendendo sobre bloqueio intérprete global ( GIL ) é uma boa idéia. GIL é um algoritmo que controla a execução de vários segmentos em um programa Python. GIL é um requisito quando você está trabalhando com vários segmentos , porque o gerenciamento de memória do CPython não é thread-safe . Além disso , a GIL tem sido conhecido para degradar um desempenho programas . Um exemplo é que ele pode levar mais tempo para dois fios para ligar para a mesma função de uma thread chamar a função duas vezes. Usando GIL

Em um programa Python multi-threaded um segmento não pode acessar com segurança objetos Python menos que o GIL é mantido pelo thread atual. O GIL garante que ambos os segmentos estão devidamente atualizar as referências de objeto que está sendo chamado. Para começar a usar o GIL que você precisa para salvar o estado do segmento em uma variável local e liberar o bloqueio global intérprete. Neste ponto, você pode realizar o seu bloqueio de operação de entrada /saída e readquirir o bloqueio global intérprete quando é completa. Por fim, restaurar o estado do segmento da variável local. Você pode usar o seguinte exemplo macro para simplificar o processo :

Py_BEGIN_ALLOW_THREADS ... Faça alguma bloqueando a operação I /O ... Py_END_ALLOW_THREADS
Chamando o código Python

Muitas vezes tópicos são criados a partir de outras linguagens de programação como C e se você precisa chamar múltipla tópicos , então você precisa usar GIL . Você deve primeiro registar-se estes tópicos com um intérprete através de uma estrutura de dados do estado da linha e , em seguida, adquirir o GIL . Para simplificar esse processo, você pode usar o " PyGILState_Ensure ()" e " PyGILState_Release ( )" funções. O seguinte é um exemplo de como aplicar este conceito :

PyGILState_STATE gstate ; gstate = PyGILState_Ensure () ;/* Executar ações Python aqui. * /resultado = CallSomeFunction () ;/* avaliar resultado ou lidar com exceção * //* Solte o fio . Não API Python permitido além deste ponto. * /PyGILState_Release ( gstate );

Python Threads

Em Python Um segmento é um segmento do sistema real, como qualquer outra execução do programa. Ao executar um fio Python cria uma estrutura pequena de dados com o estado intérprete. Após isto, uma nova thread é lançado e se chama " PyEval_CallObject . " O último passo é uma simples função C que roda tudo o Python especificado. O GIL controla cuidadosamente cada execução de segmento . O seguinte é um exemplo de um segmento Python:

timeimport importação threadingclass CountdownThread ( threading.Thread ) : def __ init__ (self, contam) : threading.Thread.__init__ (auto ) self.count = countdef run ( auto ) : enquanto self.count > 0 : print " Contagem regressiva " , self.countself.count - = 1time.sleep (5) retornar
GIL Problemas e
substituição
desenvolvedores

Python têm discutido a eliminação de GIL , mas depararam-se com alguns desafios . Um problema frequentemente mencionado com GIL é que ele impede que programas CPython vários segmentos de tirar pleno proveito de processadores multi-core . Qualquer substituição GIL deve ser simples e concorrente ao trabalhar com threads. Deve ser mais rápido do que GIL e deve ter uma boa compatibilidade de API. Um exemplo para a compatibilidade API é ter bom traçado ao enumerar os objetos que ele aponta.

Anterior :

Próximo : No
  Os artigos relacionados
·Erros de Unicode em Python 
·Geoprocessamento Com Python 
·O que é Erlang em Python 
·Lista de Python Mescla 
·Como calcular a interpolação numérica Usando Python 
·Erros não numéricos portuárias em Python 
·Como Gráfico com Software para Python 
·Como editar arquivos PYD 
·Funções com matrizes e escalas em Numerical Python 
·Cabeçalho Erro em Python 
  Artigos em destaque
·Como excluir registros de uma tabela SQL em PHP 
·Como Produzir caracteres UTF-8 em PHP 
·Como converter XML para Enum 
·Como localizar Tipos Enum 
·Como instalar o SQL Server 2005 Express no Windows Vist…
·Como escrever um texto baseado Game Script em PHP 
·Como encontrar buffer overflows 
·Como adicionar a uma matriz C # Cordas 
·Como editar My Web Search Toolbar Ferramentas 
·Como fazer Java Reconhecer pares e ímpares Cordas 
Cop e direita © Conhecimento computador http://ptcomputador.com Todos os Direitos Reservados