2010-08-04 3 views
1

Mise à jour: Pour ceux qui se demandent ce que je suis allé avec à la fin - je divise le jeu de résultats en 4 et a couru 4 instances du même programme avec un argument chacun indiquant quel ensemble à traiter. Ça a fait l'affaire pour moi. Je considère également le module PP. Bien que cela fonctionne, il préfère le même programme. S'il vous plaît contacter si c'est une mise en œuvre horrible! Merci ..Pythoneux, s'il vous plaît aider à convertir ce à utiliser les concepts Python Threading

Voici ce que fait mon programme. Rien de la mémoire intensive. C'est un traitement en série et ennuyeux. Pourriez-vous m'aider à convertir cela en un processus plus efficace et passionnant? Dites, je traite 1000 enregistrements de cette façon et avec 4 threads, je peux l'obtenir à 25% de temps! J'ai lu des articles sur comment le threading python peut être inefficace s'il est mal fait. Même le créateur de python dit la même chose. J'ai donc peur et pendant que je lis plus sur eux, je veux voir si les gens brillants ici peuvent me diriger dans la bonne direction. Muchos gracias!

def startProcessing(sernum, name): 
    ''' 
    Bunch of statements depending on result, 
    will write to database (one update statement) 

    Try Catch blocks which upon failing, 
    will call this function until the request succeeds.  
    ''' 

for record in result: 
    startProc = startProcessing(str(record[0]), str(record[1])) 
+6

fils de Python ne peuvent pas fonctionner en même temps, en raison de l'interprète de verrouillage global; vous voulez de nouveaux processus à la place. Regardez le module 'multiprocessing'. – katrielalex

+0

Oups, je pensais que le module de thread est tout ce dont j'avais besoin, va rechercher le module multi-traitement. Merci beaucoup! – ThinkCode

+0

Vous pouvez également regarder l'implémentation de Python Stackless, Jython ou IronPython, car ils n'ont pas de problème GIL. – fuwaneko

Répondre

1

Les threads Python ne peuvent pas s'exécuter en même temps en raison du verrou Global Interpreter; vous voulez de nouveaux processus à la place. Regardez le module multi-traitement.

(j'ai été chargé d'afficher cela comme une réponse = p.)

Questions connexes