2010-11-30 5 views
0

Je souhaite l'utiliser pour lire des valeurs dans des fichiers 17770 et les ajouter tous à la fin d'un objet dictionnaire. J'ai une machine avec 8 cœurs.Comment utiliser les threads en python

Ce code

def run_item_preprocess(): 
    scores = {}; 
    for i in range(1,17771): 
     filename1 = "x_" + str(i) + ".txt"; 
     lines1 = open(filename1).readlines(); 
     Item1 = {}; 
     for line in lines1: 
      tokens = line.split(','); 
      Item1[int(tokens[1])] = int(tokens[2]); 
     for j in range(1,17771): 
      if j == i: 
       continue; 
      filename2 = "x_" + str(i) + ".txt"; 
      lines2 = open(filename2).readlines(); 
      Item2 = {}; 
      for line in lines2: 
       tokens = line.split(','); 
       u = int(tokens[1]); 
       r = int(tokens[2]); 
       if u in Item1: 
        Item2[u] = r; 
      if i not in scores: 
       scores[i] = {}; 
      scores[i]= (s(Item1,Item2),j); 
+0

Je cherche quelqu'un qui pourrait m'aider dans cela ... J'ai posté mon code – turbonerdo

+0

Suis-je en train de lire ce mauvais? Vous essayez d'ouvrir chacun de vos 17770 fichiers 17770 fois? –

+3

Avant de penser à le faire tourner dans plusieurs threads, vous devez vous assurer que le code s'exécute correctement en tant que thread unique. Je doute sérieusement que ce code fasse ce que vous voulez qu'il fasse. (315772900 fichier lit?) –

Répondre

4

Voici le merveilleux module de multiprocessing. Il vous permet de paralléliser le code, en utilisant des processus pas de threads. Cela utilisera tous les cœurs.

Une différence importante est que les processus ne partagent pas la mémoire; une file d'attente aidera avec l'étape de réduction.

+0

merci un je pense que cela pourrait aider – turbonerdo

+0

Notez que l'OP dit qu'il/elle doit "ajouter tous à la fin à un objet dictionnaire." Cela pourrait rendre le multitraitement problématique. –

+0

Le dictionnaire ne doit pas être partagé; il y aurait beaucoup de conflits si c'était le cas. – Tobu

0

Comment pensez-vous que l'utilisation de threads aiderait à cela?

Bien que Python prenne en charge le thread, l'implémentation standard (CPython) exécute only one thread at a time. Il est donc difficile de voir comment cela pourrait accélérer le processus, même sur plusieurs cœurs.

(Si vous utilisez JPython ou IronPython, cependant, cette restriction ne concerne pas.)

+0

bien .. J'ai 8 coeurs sur ma machine – turbonerdo

+1

Oui, et en supposant que vous utilisez CPython, un seul de ces cœurs serait d'exécuter un thread Python à tout moment. Comment cela aide-t-il? –

+0

donc ça ne marchera pas même si j'ai 8 cœurs? – turbonerdo

Questions connexes