Python – Threads x Process
Creio que muitos aqui devem já ter desenvolvido com Threads, e muito já devem ter pensado que Threads melhoram o desempenho de um software. Mas, gostaria de dizer que Threads não melhoram efetivamente o desempenho de um software. As Threads podem ajudar a controlar melhor seu software, mas caso você tenha um problema muito grande e você quer dividir este problemas para resolve-lo paralelamente as Threads não vão ajudar. Eu mesmo fiz alguns testes e vi que não há nenhuma diferença entre um programa linear chamando uma função atrás da outra e um programa que chama várias Threads ao mesmo tempo. Isso acontece pois as Threads de um determinado programa, por padrão, é executada dentro do mesmo processo. Isso acaba limitando todo o processamento dentro do mesmo processo. Então se você tiver uma ou vária threads trabalhando juntas para resolver o mesmo problema o tempo será o mesmo. Mas o Python 3.1 traz uma novidade, uma nova classe chamada multiprocessing. Está classe ajuda a melhorar o tempo de processamento de um determinado software.
Vamos supor que você tem uma lista de intervalos de números muito grandes, e você tem uma máquina Quad-Core e você quer usar o máximo destes quatro núcleos. A melhor forma é usar a classe multiprocessing e não a classe threading. Pois a multiprocessing irá criar um novo processo para cada chamada da função que você deseja executar ele irá criar um novo processo e o S.O. será responsável por gerenciar estes processo, e logicamente os processos serão divididos entre os núcleos!
Mas como fazer isso. Irei colocar dois arquivos anexados neste post. Um utilizando Threads e outro Processos. E este sistema mostra quanto tempo demora entre iniciar o programa e finalizar o ultimo processo. Se você tiver um computador com mais de um núcleo. Veja a diferença no resultado. Mas se seu computador for Mono-Core o resultado será basicamente o mesmo… Irá até demorar um pouco mais o de Processos pois há uma perda de processamento para criar os processos. Bom quem quiser ver o resultado mesmo vejam em sua lista de processos a diferença. Usando o programa com Threads você verá que a memória do Programa com Threads irá aumentar. No caso dos multi-processos você verá a lista de processos aumentar. Bom vejam com mais detalhes nos arquivos: Processos Thread (Utiliza Python 3.1)

Bacana, muita gente faz essa confusão e não entende que um programa com multithreading tende a ser mais lento por causa do escalonamento em algumas maquinas.
Mas tenho uma observação a fazer… os processadores da intel que tem o HyperThreading conseguem executar duas threads simultâneas por núcleo, alguns sistemas até leem esses processadores com o dobro de núcleos físicos, ou mostram núcleos virtuais, se vocé quiser o melhor resultado mesmo você pode criar processos com duas threads em cada um, num i7 por exemplo voce teria 4 processos rodando duas Threads cada simultaneamente… fica lindo.