2010-11-17 28 views
2

J'ai une classe qui boucle sur certains fichiers de données, les traite, puis réécrit de nouvelles données. L'analyse de chaque fichier est complètement indépendante des autres. La classe contient les informations nécessaires à l'analyse de ses attributs, mais l'analyse n'a pas besoin de modifier les attributs de la classe. Ainsi je peux faire l'analyse d'un fichier de données une seule méthode de ma classe. L'analyse pourrait en principe se faire en parallèle puisque chaque fichier de données est indépendant. En aparté, j'envisageais de rendre ma classe itérable. Puis-je utiliser le module multitraitement pour générer des processus qui sont des méthodes de ma classe? J'ai besoin d'utiliser le multitraitement parce que j'utilise du code tiers qui a une très mauvaise fuite de mémoire (remplit tous les 24 Go de mémoire après environ 100 fichiers de données).Python - Les méthodes de classe sont-elles multiprocessues?

Si non, comment vous y prendrez-vous? Souhaitez-vous simplement utiliser une fonction normale appelée par ma classe (en passant toutes les informations dont j'ai besoin en tant qu'arguments) au lieu d'une méthode? Comment les arguments sont-ils transmis aux fonctions en multitraitement? Est-ce que ça fait une copie profonde?

Répondre

0

Vous ne mentionnez pas votre processus en utilisant des ressources externes, il doit donc être compatible avec fork(). Fork duplique la mémoire et les descripteurs de fichiers, l'état du programme est identique dans le parent et l'enfant. Sauf si vous utilisez des fenêtres qui ne peuvent pas bifurquer, allez-y.

1

Oui, si vous ne mettez pas à jour les données de la classe elle-même qui doit être partagée entre les instances, le multitraitement est l'outil qui vous convient dans ce cas.

+0

Merci beaucoup. Est-ce juste parce que les méthodes sont juste des fonctions avec 'self' passé comme premier argument (qui serait passé par la valeur de deepcopy dans ce cas)? Je pensais qu'il y avait une sorte de différence interne. – kiyo