2017-11-26 4 views
1

Ich benutze Python 3.5, um eine Liste zu bearbeiten, die in diesem Fall predictions_dict['D'] ist und im Verzeichnis predictions_dict enthalten ist. Dies ist der Code, den ich benutze:Abrufen einer leeren Liste beim Anhängen von Werten mit Multiprocessing

import multiprocessing as multip 

predictions_dict = {'A': [], 
        'B': [], 
        'C': [], 
        'D': [], 
        'E': [], 
        'F': [], 
        'Def': []} 

data = [{'index': 1, 'rank': 'A'}, {'index': 2, 'rank': 'D'}, {'index': 3, 'rank': 'E'}] 
prediction = [(1, 'C'), (2, 'D'), (3, 'D')] 


def create_predictions_dict(index, rank): 
    for j in data: 
     if j['index'] == index: 
      predictions_dict[rank].append((index, j['rank'], rank)) 
      break 

np = multip.cpu_count() 
p = multip.Pool(processes=np) 
_ = p.starmap(create_predictions_dict, prediction) 
p.close() 
p.join() 

print('final list:', predictions_dict['D']) 

wenn ich diesen Code ausführen, ich die Ausgabe zu erhalten ist:

final list: [] 

Und ich verstehe nicht, warum, wie ich bekommen würde erwarten:

final list: [(2, 'D', 'D'), (3, 'E', 'D')] 
+1

Ihre separaten Prozesse teilen nicht den Status. –

+0

Wie korrigiere ich das? – Nadni

+2

Es ist [nicht-trivial] (https://docs.python.org/3.6/library/multiprocessing.html#sharing-state-between-processes) –

Antwort

1

ich an einer Lösung gearbeitet habe, dank der Tatsache, dass das Problem in den Kommentaren als die Tatsache identifiziert, dass Prozesse Staat nicht teilen:

import multiprocessing as multip 

predictions_dict = {'A': [], 
        'B': [], 
        'C': [], 
        'D': [], 
        'E': [], 
        'F': [], 
        'Def': []} 

data = [{'index': 1, 'rank': 'A'}, {'index': 2, 'rank': 'D'}, {'index': 3, 'rank': 'E'}] 
prediction = [(1, 'C'), (2, 'D'), (3, 'D')] 


def create_predictions_dict(index, rank): 
    for j in data: 
     if j['index'] == index: 
      return index, j['rank'], rank 

np = multip.cpu_count() 
p = multip.Pool(processes=np) 
sk = p.starmap(create_predictions_dict, prediction) 
p.close() 
p.join() 

for elem in sk: 
    predictions_dict[elem[2]].append(elem) 

print('final list:', predictions_dict['D']) 
Verwandte Themen