Disons que vous avez un processus Python qui collecte des données en temps réel à raison d'environ 500 lignes par seconde (ce qui peut être parallélisé pour réduire à environ 50 lignes par seconde) à partir d'un système de mise en file d'attente et qui les ajoute à un fichier de type DataFrame
:
rq = MyRedisQueue(..)
df = pd.DataFrame()
while 1:
recv = rq.get(block=True)
# some converting
df.append(recv, ignore_index = True)
Maintenant la question est : Comment utiliser les processeurs en fonction de ces données ? Je suis donc tout à fait conscient des limites de la GIL et a regardé dans Gestionnaire de multitraitement espace de noms , ici aussi mais il semble qu'il y ait quelques inconvénients en ce qui concerne la latence sur la trame de données à maintien central . Avant de creuser, j'ai aussi essayé pool.map
que je que reconnu pour appliquer pickle
entre les processus, ce qui est bien trop lent et entraîne trop de frais généraux.
Après tout cela, je me demande finalement comment (si) une insertion de 500 lignes par seconde (ou même 50 lignes par seconde) peut être transférée à différents processus avec un peu de temps CPU restant pour appliquer des statistiques et des heuristiques sur les données dans les processus enfants ?
Peut-être serait-il préférable d'implémenter un socket tcp personnalisé ou un système de file d'attente entre les deux processus ? Ou existe-t-il des implémentations dans pandas
ou d'autres librairies pour permettre un accès rapide à l'unique grand cadre de données du processus parent. ? J'adore les pandas !