Segue um pequeno programa que fiz para experimentar o uso Threads e Eventos do modulo threading de Python. A minha ideia foi definir um evento que pode estar ativo ou nao e que controla o inicio e o termino do processamento de cada Thread.Ao dividir o trabalho de calcular se um numero e primo em varias linhas de controle (Threads), teoricamente seria possivel melhorar o tempo de processamento. Porem como essa aplicacao e CPU bound , e como um processo do interpretador Python nao permite que suas Threads executem de forma simultanea, cada qual em uma CPU ou nucleo fisico, na pratica esse exemplo acaba nao sendo muito util para esse caso, a nao ser como prova de conceito.Se a aplicacao trabalhasse com o uso de entrada e saida, ou seja, IO bound, entao ja seria mais interessante, pois enquanto uma Thread poderia estar bloqueada fazendo a leitura ou gravacao em um disco, enviando ou recebendo dados via rede ou esperando o resultado de uma consulta no banco de dados, as outras Threads poderiam estar executando, ocupando mais a CPU e consequentemente diminuindo o tempo total de execucao do programa.Segue link para acesso ao codigo, ja que nao consegui manter a formatacao usando o editor do blogspot ou mesmo carregando o fonte do HTML gerado pelo Scite. :-( Marcelo Toledo escreveu um artigo comparando a sua implmentacao em C de um corretor ortografico poposto por Peter Norgiv com a versao original em Python.Porem Marcelo Toledo ao realizar essa comparacao nao levou em consideracao que o exemplo desenvolvido por Peter Norvig era apensa um prototipo. Sendo assim, ele resolveu comparar ambos os programas, em C e Python, utilizando arquivos cada vez maiores e ilustrando a diferenca de performance entre eles.No codigo de Peter Norvig ele le o arquivo de uma vez. Da para imaginar o que acontenceu, baixa performance e "crash" com arquivos maiores de 100M devido a falta de RAM. :-(Essa e a linha na qual o programa de Peter Norvig le o arquivo e processa ele:NWORDS = train(words(file('big.txt').read()))Infelizmente Marcelo Toledo nao procurou saber qual era o "bug" do codigo, deixando no ar uma ideia de que C e robusto e Python e uma linguagem nao confiavel.Como eu fui questionado por um colega (Robson Peixoto) sobre o "porque" do problema com o codigo do corretor ortografico. Resolvi entao escrever um pequeno script que copia arquivos binarios da forma correta. E assim fica claro que Python nao tem problemas em manipular arquivos maiores que 100MB. ;-)Segue um teste de uso do script copyfile.pyruda@zion /tmp $ du -sh livecd-i686-installer-2007.0.iso416M livecd-i686-installer-2007.0.isoruda@zion /tmp $ time ./copyfile.py livecd-i686-installer-2007.0.iso teste.isoreal 0m39.708suser 0m4.517ssys 0m3.747sOu seja, sem usar muita CPU e nem mesmo RAM, esse script demorou 40segundos para copiar um arquivo de 416MB, ou seja, 10MB/s aproximadamente.Abaixo o codigo do script copyfile.py#!/bin/env python# -*- coding: utf-8 -*-import systry: origem = sys.argv[1] destino = sys.argv[2]except IndexError: print "Modo de usar: copyfile.py origem destino" sys.exit(1)#Exemplo de leitura e gravacao de arquivos grandes - usando modo binarioinput = file(origem, 'rb')output = file(destino, "wb")for line in input: output.write(line)#Fechando os arquivosinput.close()output.close() A comunidade de