Ich arbeite an n Elemente (namens "Paar" unten) Variationen mit Wiederholung als Argument meiner Funktion verwendet. Natürlich funktioniert alles gut, solange die "r" -Liste nicht groß genug ist, um den gesamten Speicher zu verbrauchen. Das Problem ist, dass ich mehr als 16 Wiederholungen für 6 Elemente machen muss. Ich benutze dafür 40-Core-System in der Cloud.Python Itertools mit Multiprocessing - riesige Liste vs ineffiziente CPUs Nutzung mit Iterator
Der Code sieht sieht wie folgt aus:
if __name__ == '__main__':
pool = Pool(39)
r = itertools.product(pairs,repeat=16)
pool.map(f, r)
Ich glaube, ich Iterator statt der Schaffung der riesigen Liste im Voraus und hier beginnt das Problem verwenden sollten ..
Ich habe versucht, das Problem mit lösen der folgende Code:
if __name__ == '__main__':
pool = Pool(39)
for r in itertools.product(pairs,repeat=14):
pool.map(f, r)
Das Speicherproblem geht weg, aber die CPU-Nutzung ist wie 5% pro Kern. Jetzt ist die Single-Core-Version des Codes schneller als diese.
Ich würde wirklich schätzen, wenn Sie mich ein bisschen führen könnte ..
Dank.
Randbemerkung: Wenn Sie moderne Python (Python 3.3 oder höher) verwenden, ist es am besten, 'Pool' mit der Anweisung' with' zu verwenden, damit die 'Pool'-Worker vorhersehbar bereinigt werden. Ändern Sie einfach 'pool = Pool (39)' in 'mit Pool (39) als pool:' und ziehen Sie die darunter liegenden Zeilen ein, die den Pool verwenden; Wenn der Block verlassen wird, werden die Arbeiter sofort aufgeräumt. – ShadowRanger