Wie gruppiert man die Elemente eines Iterators am besten in Stapel?Python

Python-Programme
Anonymous
 Wie gruppiert man die Elemente eines Iterators am besten in Stapel?

Post by Anonymous »

Unser Programm liest die Ergebnisse einer SQL-Abfrage und wandelt jede Zeile in eine Aufgabe um, die ein Mitarbeiter ausführen muss. Etwas wie:

Code: Select all

for row in query.results():
cluster.submit(row)
Die meisten Aufgaben sind jedoch so schnell, dass der Kommunikationsaufwand pro Aufgabe die Gesamteffizienz verringert – und ich möchte N aufeinanderfolgende Zeilen in einer einzigen Aufgabe zusammenfassen. Das Beste, was mir einfällt, wäre so etwas wie:

Code: Select all

rows = []
for row in query.results():
rows.append(row)
if len(rows) == N:
cluster.submit(rows)
rows = []
if rows:    # Submit the last batch, if any
cluster.submit(rows)
Es muss einen pythonischeren Weg geben, dies zu tun – irgendwelche Vorschläge?

Die Kommentarfunktion scheint weg zu sein, daher werde ich hier auf Folgefragen antworten:
  • F: Haben Sie itertools.batched() rund um Python 3.12 erkundet? A: Das habe ich nicht, nein ... Unser Python ist immer noch 3.6 (das Python auf RHEL7 und RHEL8). Mich würde auch interessieren, wie man das macht – auch wenn itertools das schon kann.
  • F: Es wäre hilfreich zu wissen, was ein Cluster ist A: In diesem Fall ist es der JobCluster von Distributed Python – aber ich bin im Allgemeinen immer noch neugierig, wie man am besten einen langen Iterator in einen kürzeren umwandelt, der aus Stapeln des Originals besteht...

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post