São tópicos Python de buggy?

votos
24

Um amigo codificador confiável me disse que a implementação multi-threading atual do Python é sério de buggy - o suficiente para evitar o uso por completo. O que pode dizer sobre esse boato?

Publicado 29/08/2008 em 06:43
fonte usuário
Em outras línguas...                            


6 respostas

votos
50

Tópicos Python são bons para a programação de I / O concorrente . Threads são trocados fora da CPU tão logo eles bloqueiam aguardando pela entrada de arquivo, rede, etc. Isso permite que outros tópicos Python para usar a CPU enquanto outros esperam. Isso permitirá que você para escrever um rastreador servidor web ou web multi-threaded, por exemplo.

No entanto, tópicos Python são serializados pela GIL quando entram núcleo intérprete. Isto significa que se dois tópicos são mastigando números, apenas um pode ser executado a qualquer momento. Isso também significa que você não pode tirar proveito de multi-core ou multi-processador arquiteturas.

Existem soluções como executando vários intérpretes Python simultaneamente, utilizando uma biblioteca de enfiamento baseado C. Isto não é para os fracos de coração e os benefícios pode não valer a pena. Vamos esperar para um todo solução Python em uma versão futura.

Respondeu 29/08/2008 em 07:33
fonte usuário

votos
15

A implementação padrão de Python (geralmente conhecida como CPython como está escrito em C) utiliza encadeamentos de SO, mas uma vez que é o Global Interpreter Lock , apenas um thread por vez é permitido para executar código Python. Mas dentro dessas limitações, as bibliotecas de threading são robustas e amplamente utilizado.

Se você quer ser capaz de usar múltiplos núcleos de CPU, existem algumas opções. Uma é a utilização de múltiplas intérpretes python simultaneamente, como foi referido por outros. Outra opção é usar uma implementação diferente de Python que não usa um GIL. As duas principais opções são Jython e IronPython .

Jython é escrito em Java, e é agora bastante maduro, embora algumas incompatibilidades permanecem. Por exemplo, o framework web Django não ainda funcionar perfeitamente , mas está se aproximando o tempo todo. Jython é ótimo para segurança do thread , sai melhor em benchmarks e tem uma mensagem insolente para para aqueles que querem o GIL .

IronPython usa o framework .NET e é escrito em C #. A compatibilidade é alcançar a fase onde Django pode ser executado em IronPython (pelo menos como uma demo) e há guias para usar threads em IronPython .

Respondeu 29/08/2008 em 18:17
fonte usuário

votos
8

A GIL (Global Interpreter Lock) pode ser um problema, mas a API é bastante OK. Experimente o excelente processingmódulo, que implementa a API threading para processos separados. Eu estou usando isso agora (embora em OS X, ainda têm de fazer alguns testes no Windows) e estou realmente impressionado. A classe Queue é realmente salvar a minha bacon em termos de gestão da complexidade!

EDIT : é seemes o módulo de processamento está sendo incluído na biblioteca padrão a partir da versão 2.6 ( import multiprocessing). Alegria!

Respondeu 29/08/2008 em 07:55
fonte usuário

votos
4

Tanto quanto eu sei que não existem erros reais, mas o desempenho quando rosqueamento em CPython é muito ruim (em comparação com a maioria das outras implementações de threading, mas geralmente bom o suficiente se a maioria de todos os segmentos fazer é bloco), devido à GIL (Global Interpreter lock), então realmente é implementação específica, em vez de linguagem específica. Jython, por exemplo, não sofrem desta provocada pela utilização do modelo de thread Java.

Veja este post sobre porque não é realmente viável para remover o GIL da implementação CPython, e este por algum elaboração prático e soluções alternativas.

Faça uma rápida no google para "Python GIL" para mais informações.

Respondeu 29/08/2008 em 06:58
fonte usuário

votos
1

Se você quiser codificar em python e obter grande apoio threading, você pode querer verificar para fora IronPython ou Jython. Desde que o código python em IronPython e Jython executado no .NET CLR e Java VM, respectivamente, eles gostam do grande apoio de threading incorporado essas bibliotecas. Além disso, IronPython não tem a GIL, um problema que impede tópicos CPython de tirar pleno partido das arquiteturas multi-core.

Respondeu 23/02/2009 em 07:15
fonte usuário

votos
-2

Eu usei-o em diversas aplicações e nunca tive nem ouvi falar de rosca ser outra coisa que não 100% confiável, desde que você sabe seus limites. Você não pode gerar threads de 1000, ao mesmo tempo e esperar que o programa seja executado corretamente no Windows, no entanto, você pode facilmente escrever um pool trabalhador e apenas alimentá-lo 1.000 operações, e manter tudo agradável e sob controle.

Respondeu 29/08/2008 em 06:50
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more