GIL em Python 3.1
-
10-07-2019 - |
Pergunta
Alguém sabe o destino da Global Interpreter Bloqueio em Python 3.1 contra C ++ multithreading integração
Solução
GIL ainda está lá em CPython 3.1; andorinha Unladen projetos objetivos (entre muitos outros aumentos de performance) para eventualmente removê-lo, mas ainda é um caminho de seus objetivos, e está trabalhando em 2.6 pela primeira vez com a intenção de, eventualmente, portar para 3.x para qualquer x será atual no momento em que a versão 2.y é considerada a ser feito. Por enquanto, o multiprocessamento (em vez de enfiar) continua a ser a forma de escolha para a utilização de múltiplos núcleos em CPython (IronPython e Jython são bons também, mas eles não suportam Python 3, atualmente, nem fazem integração C ++ tão fácil qualquer um; - ).
Outras dicas
Mudanças significativas ocorrerão no GIL para Python 3.2. Dê uma olhada na Novidades para Python 3.2 , e o segmento que iniciou-lo na lista de discussão .
Enquanto as mudanças não significam o fim do GIL, eles arauto potencialmente enormes ganhos de desempenho.
Update0
- Os ganhos gerais de desempenho com o novo GIL em 3,2 por Antoine Pitrou eram insignificantes e, em vez focado em melhorar problemas de contenção que surgem em certos casos de canto.
- admirável esforço por David Beazley foi feito para implementar um programador para melhorar significativamente o desempenho quando CPU e IO tópicos ligados são mista, que, infelizmente, foi derrubado.
- O trabalho Unladen Swallow foi href="http://www.python.org/dev/peps/pep-3146/" proposta para a fusão em Python 3.3, mas este foi retirado devido a falta de resultados em que projecto. PyPy é agora o projeto preferido e é atualmente solicitando financiamento para adicionar suporte Python3k. Há muito pouca chance de que PyPy vai se tornar o padrão no momento.
Esforços têm sido feitos nos últimos 15 anos para remover o GIL de CPython, mas para o futuro próximo ele está aqui para estadia.
A GIL não irá afectar o seu código que não usa objetos python. Em Numpy, nós liberamos o GIL para o código computacional (linear álgebra chamadas, etc ...), e o código subjacente pode usar multithreading livremente (na verdade, esses são bibliotecas geral 3o partido que não sabem nada sobre python)
O GIL é uma coisa boa.
Basta fazer a sua aplicação C ++ liberar o GIL enquanto ele está fazendo o seu trabalho de vários segmentos. código Python continuará a ser executado em outros tópicos, intocada. Apenas adquirir o GIL quando você tem que tocar objetos python.
Eu acho que sempre haverá uma GIL. O motivo é o desempenho. Fazendo todo o segmento seguro baixo nível de acesso - significa colocar um mutex ao redor de cada operação de hash etc. é pesado. Lembre-se que uma simples declaração como
self.foo(self.bar, 3, val)
já poderia ter, pelo menos, 3 (se val é uma organização global) pesquisas hashtable no momento e talvez até muito mais se o cache método não é quente (dependendo da profundidade herança da classe)
É caro -. É por isso que Java abandonou a idéia e hashtables introduzidas que não usar uma chamada de monitor para se livrar de sua "Java é lento" marca
Pelo que entendi o programador "brainfuck" irá substituir o GIL de python 3.2
Se o GIL está ficando no caminho, basta usar o multiprocessamento módulo . Ele gera novos processos, mas usa o modelo de segmentação e (a maioria do) api. Em outras palavras, você pode fazer o paralelismo baseado em processos em um fio-like forma.