2016-03-20 6 views
1

Wenn ich dieses Skript unter Linux ausführe, werden 8 Duplikate gedruckt. Wie erzwingen Python verwenden Sie alle Kerne auf verschiedene Ergebnisse, anstatt auf Duplikate?Python-Multiprozessor-Duplikate

from multiprocessing import Pool 

def f(): 
    f = open("/path/to/10.txt", 'r') 
    l = [s.strip('\n') for s in f] 
    f.close() 

    for a in range(0, len(l)): 
     for b in range(0, len(l)): 
      result = 0 
      if (a == b): 
       result = 1 
      else: 
       counter = 0 
       for i in range(len(l[a])): 
        if (int(l[a][i]) == int(l[b][i]) == 1): 
         counter += 1 
        result = counter/10000 
        print((a + 1), (b + 1), result) 

if __name__ == '__main__': 
    p = Process(target=f) 
    p.start() 
    p.join() 

Antwort

0

Wenn Sie einfach mehr als einen Kern ausführen möchten Sie sind nur ein verwenden Sie hier mehrere Prozesse verwenden müssen.

auch müssen Sie Ihre Routine f in unabhängigen Einheiten/Routine so brechen, dass es parallel arbeiten kann und die gesamte Aufgabe kann unter den verschiedenen Worker-Prozesse geteilt werden.

Hier ist eine Probe 2-Prozess-Code, der mehrere Kerne auf Ihrem Computer verwenden kann:

from multiprocessing import Process 

def task(arg): 
    pass 

if __name__ == '__main__' 
    value = 'something' 
    prc1 = Process(target=task, args=(value,)) 
    prc2 = Process(target=task, args=(value,)) 
    prc1.start() 
    prc2.start() 
    prc1.join() 
    prc2.join() 
+0

Wenn am noch 8 Duplikate zu bekommen. Kann ich nicht nur 'prc1 = Process (target = task)' – Masyaf

+0

verwenden, bitte erläutern Sie, was Sie mit 'duplicates' meinen? Wenn Sie einen einzigen "Prozess" verwenden, können Sie nur einen Kern Ihrer Maschine verwenden. – anand

+0

Ergebnisse wie '1 2 0.0001 1 2 0.0002 1 2 0.0002 1 2 0.0002' statt nur eine Zeile' 1 2 0.0001'. Und warum bekomme ich unterschiedliche Ergebnisse für den gleichen Vergleich? – Masyaf