2017-05-04 2 views
0

Im Versuch, eine Schleife über mehrere Prozesse zu verteilen und drucken Sie jede Iteration Index als verarbeitet. Was ich vermisse, ist soweit ich gekommen bin. Ive versuchtPython Multiprocessing Get Item Index aus Schleife

import multiprocessing 
import os 

def f(key_value): 
    print (key_value) 
if __name__ == '__main__': 
    pool = multiprocessing.Pool(2) 
    for _ in pool.imap(f, range(100)): 
     pass 

und auch

from multiprocessing import Pool 
    def th(ur): 
     print (ur) 
    if __name__ == '__main__': 
    pool = Pool(2) 
    results = pool.map(th,range(100)) 
    pool.close() 
    pool.join() 

Antwort

0

das Problem ist die Geschwindigkeit des Hauptprozesses gegen die Arbeiter ist. Der Hauptprozess wird vor dem Ende der Verarbeitung beendet. (Wenn nicht mit .close.join)

Und auch verpasst einen Rückgabewert in der Tasklet Funktion.

Der folgende Code funktioniert wie erwartet:

import multiprocessing 

def f(tuple_value): 
    index, value = tuple_value 
    print("Index: {} Value: {}".format(index, value)) 
    return True 

if __name__ == '__main__': 
    pool = multiprocessing.Pool(2) 
    pool.imap(f, enumerate(range(100))) 
    pool.close() 
    pool.join() 

Output in Python 3.x und 2.7:

$ python3 test.py 
Index: 0 Value: 0 
Index: 1 Value: 1 
Index: 2 Value: 2 
Index: 3 Value: 3 
[...] 
+0

Noch stecken nichts kommt zurück –

+0

@tagnihuguespascal sorry ich nicht bekommen, was das Problem ist ... Ist es erfolgt keine Ausgabe? –

+0

Ja nein, das ist das Problem. passen Sie bitte auch die letzte Zeile Ihres Codes an. Danke –

0

i Ihr zweites Beispiel getestet und es funktioniert (mit Ausnahme einiger Vertiefung Ausgaben). Getestet auf Windows 10 64bit mit Python 2.7.13

Ich habe auch einige zufällige Wartezeit hinzugefügt, um den asynchronen Druck zu überprüfen.

import time 
import random 
from multiprocessing import Pool 

def th(ur): 
    time.sleep(random.randint(1,3)) 
    print (ur) 
    #return True 

if __name__ == '__main__': 
    pool = Pool(2) 
    results = pool.map(th,range(10)) 
    pool.close() 
    pool.join() 
+0

Danke. Das Problem ist, dass keine von ihnen funktionieren unter Windows –

+0

@ tagnihuguespascal Entschuldigung, aber mit "und es funktioniert" meinte ich auf Windows ... ich testete mit Python 2.7.xx auf Windows 10 64bit – Kadmillos