Ich versuche, die Listen innerhalb des Wörterbuchs clean_txt in einer anderen Funktion zu manipulieren, aber es funktioniert nicht und ich am Ende mit leeren Listen innerhalb des Diktats.Kann eine Variable nicht lokal zu einer Funktion in einer anderen Funktion mutieren
Ich verstehe, dass sowohl Listen als auch Dicts veränderbare Objekte sind, was ist das Problem hier?
def process_questions(i, question_list, questions, question_list_name):
''' Transform questions and display progress '''
print('processing {}: process {}'.format(question_list_name, i))
for question in questions:
question_list.append(text_to_wordlist(str(question)))
@timeit
def multi(n_cores, tq, qln):
procs = []
clean_txt = {}
for i in range(n_cores):
clean_txt[i] = []
for index in range(n_cores):
tq_indexed = tq[index*len(tq)//n_cores:(index+1)*len(tq)//n_cores]
proc = Process(target=process_questions, args=(index, clean_txt[index], tq_indexed, qln,))
procs.append(proc)
proc.start()
for proc in procs:
proc.join()
print('{} records processed from {}'.format(sum([len(x) for x in clean_txt.values()]), qln))
print('-'*100)
Es ist ein bisschen irreführend zu sagen, dass es zum Parent-Prozess gehört :) – Maresh
@Maresh Er macht 'clean_txt [i] = []' im Hauptprozess, so dass diese Liste zum Hauptprozess gehört, oder? –
Nun, jeder Prozess wird seinen eigenen Speicherplatz haben, kopiert aus dem übergeordneten Prozess "Eins, es ist wichtig zu verstehen, dass beim Spielen mit Multiprocessing. Am Ende hast du recht, diese genaue Speicheradresse gehört zu den Eltern, aber es sollte in der Erklärung IMO klarer sein. – Maresh