Nehmen wir also an, Sie haben einen Python-Prozess, der Daten in Echtzeit mit ungefähr 500 Zeilen pro Sekunde (dies kann weiter parallelisiert werden, um auf ungefähr 50 ps zu reduzieren) aus einem Warteschlangensystem sammelt und an Folgendes anfügt DataFrame
:
rq = MyRedisQueue(..)
df = pd.DataFrame()
while 1:
recv = rq.get(block=True)
# some converting
df.append(recv, ignore_index = True)
Die Frage ist nun: Wie werden die CPUs basierend auf diesen Daten genutzt? So bin ich von den Einschränkungen des voll bewusst GIL , und sah in Manager - Multiprocessing - Namespace , auch hier , aber es sieht so gibt es einige Nachteile im Hinblick auf die Latenz auf dem centerally halten Datenrahmen . Bevor ich pool.map
mich damit beschäftigte, habe ich auch versucht, was ich dann erkannt habe , um es pickle
zwischen den Prozessen anzuwenden , was viel zu langsam ist und zu viel Overhead hat.
Nach all dem frage ich mich schließlich, wie (wenn) eine Einfügung von 500 Zeilen pro Sekunde (oder sogar 50 Zeilen pro Sekunde) auf verschiedene Prozesse übertragen werden kann, wobei noch etwas CPU-Zeit für die Anwendung von Statistiken und Heuristiken auf die Daten im Kind verbleibt Prozesse?
Vielleicht wäre es besser, einen benutzerdefinierten TCP-Socket oder ein Warteschlangensystem zwischen den beiden Prozessen zu implementieren? Oder gibt es einige Implementierungen in pandas
oder andere Bibliotheken, um wirklich einen schnellen Zugriff auf den einen großen Datenrahmen im übergeordneten Prozess zu ermöglichen ? Ich liebe Pandas!