2009-12-30 9 views
9

Si un projet logiciel prend en charge une version de Python sur laquelle le multitraitement a été rétroporté, y a-t-il une raison pour utiliser threading.Lock sur multiprocessing.Lock? Un verrou multiprocessing ne serait-il pas également sécurisé?Y at-il une raison d'utiliser threading.Lock sur multiprocessing.Lock?

Pour cette question, est-il une raison d'utiliser toutes les primitives de synchronisation de threading qui sont également en multiprocessing?

Répondre

12

La primitive de synchronisation du module de threading est plus légère et plus rapide que le multitraitement, en raison du manque de traitement des sémaphores partagés, etc. Si vous utilisez des threads; utiliser les verrous de threading. Les processus doivent utiliser des verrous multi-traitement.

+2

Sans mentionner que 'multiprocessing' n'est pas aussi portable que 'threading';) –

+1

Pourquoi faut-il être comme ça :) – jnoller

2

Je m'attendrais à ce que les primitives de synchronisation multi-thread soient plus rapides car elles peuvent utiliser facilement la zone de mémoire partagée. Mais je suppose que vous devrez effectuer un test de vitesse pour être sûr de cela. En outre, vous pourriez avoir des effets secondaires qui sont assez indésirables (et non spécifiés dans le document). Par exemple, un verrou process-wise pourrait très bien bloquer tous les threads du process. Et si ce n'est pas le cas, libérer un verrou pourrait ne pas réveiller les threads du processus. En résumé, si vous voulez que votre code fonctionne, vous devez utiliser les primitives de synchronisation de threads si vous utilisez des threads et les primitives de synchronisation de processus si vous utilisez des processus. Sinon, cela pourrait fonctionner uniquement sur votre plate-forme, ou même simplement avec votre version spécifique de Python.

0

multiprocessing et threading Les packages ont des objectifs légèrement différents, bien que les deux soient liés à la concurrence. threading coordonne les threads dans un processus, tandis que multiprocessing fournit une interface de type thread pour coordonner plusieurs processus.

Si votre application ne génère pas de nouveaux processus qui nécessitent une synchronisation des données, multiprocessing est un peu plus lourd, et threading package devrait être mieux adapté.

+0

Je comprends la différence entre le threading et le multitraitement. J'étais curieux de savoir pourquoi on voudrait utiliser les primitives de synchronisation du threading sur les multiprocesseurs. –