2017-08-29 3 views
1

Ich habe die Frage multiprocess in python3.5.Python Multiprozess mit zwei Listen vergleichen

Wenn ich zwei Liste wie:

xlist = [1,2,3] 
ylist = [4,5,6] 

und ich tun möchte:

for i in xlist: 
    for j in ylist: 
     print (i*j) 

der Ausgang

4 
5 
6 
8 
10 
12 
12 
15 
18 

Ich versuche, ist, dass mit Multi-Prozess so zu tun :

import multiprocessing 

global xlist 
xlist = [1,2,3] 
ylist = [4,5,6] 

def product(ylist): 
    for x in xlist: 
     for y in ylist: 
      print (x,y) 
    return 'OK' 

if __name__ == "__main__": 
    pool = multiprocessing.Pool() 
    results = [] 
    for i in range(0, len(ylist)): 
     result = pool.apply_async(job, args=(ylist,)) 
     results.append(result) 
     # print (result.get()) 
    pool.close() 
    pool.join() 

for result in results: 
    print(result.get()) 

Aber ich kann nicht die oben gezeigte Ausgabe bekommen. Meine Ausgabe ist

1 4 
1 5 
1 6 
2 4 
2 5 
2 6 
3 4 
3 5 
3 6 
1 4 
1 5 
1 6 
2 4 
2 5 
2 6 
3 4 
3 5 
3 6 
1 4 
1 5 
... 

mit dem Code.

Gibt es Möglichkeiten, das Ziel zu erreichen (muss Multiprozess verwenden)?

+0

Was meinst du? –

+0

@MadPhysicist Ich möchte mit großen Daten umgehen, also muss ich Multiprozess verwenden, um die Berechnung zu verarbeiten. Aber ich habe keine Ahnung, wie Multiprocessing zu verwenden, um zwei Liste – chilun

+2

Ich meinte "ich kann nicht das Ergebnis, das ich will." ist eine rote Flagge in einer SO Frage. Es ist zu vage –

Antwort

1

Ich denke, dass Sie ein einfaches Beispiel versuchen möchten, bevor Sie es für eine sehr große Anzahl von Zahlen und mit einer komplexeren Funktion verwenden.

Hier ist ein Programm, das druckt, was Sie wollen, verwendet Multiprocessing und sollte für größere Listen und komplexere Funktionen skalieren.

import multiprocessing 

xlist=[1,2,3] 
ylist=[4,5,6] 

def enum_tasks(): 
    for x in xlist: 
    for y in ylist: 
     yield (x,y) 

def product(xy): 
    x,y = xy 
    return x * y 

if __name__ == '__main__': 
    CHUNK_SIZE = multiprocessing.cpu_count() 
    pool = multiprocessing.Pool() 
    for result in pool.imap(product, enum_tasks(), CHUNK_SIZE): 
    print result 
+0

Danke für Hilfe! Das ist was ich brauche. – chilun