2009-12-30 17 views
9

Wenn ein Softwareprojekt eine Version von Python unterstützt, für die Multiprozessverarbeitung rückportiert wurde, gibt es einen Grund, threading.Lock über multiprocessing.Lock zu verwenden? Wäre ein multiprocessing Schloss nicht auch threadsicher?Gibt es einen Grund, threading.Lock über Multiprocessing.Lock zu verwenden?

Für diese Angelegenheit gibt es einen Grund keinen Synchronisierungsgrund von threading, die auch in multiprocessing sind zu benutzen?

Antwort

12

Das Synchronisierungs-Primitive des Threading-Moduls ist leichter und schneller als Multiprocessing, da es keine gemeinsamen Semaphore gibt usw. Wenn Sie Threads verwenden; Verwende Threading-Sperren. Prozesse sollten Multiprocessing-Sperren verwenden.

+2

Nicht zu erwähnen, dass 'Multiprocessing' nicht so portabel ist wie' threading' ist;) –

+1

Warum musst du so sein :) – jnoller

2

Ich würde erwarten, dass die Multi-Threading-Synchronisation Primitiven ziemlich schneller sein, da sie Shared Memory-Bereich leicht verwenden können. Aber ich nehme an, dass Sie einen Geschwindigkeitstest durchführen müssen, um sicher zu sein. Außerdem haben Sie möglicherweise unerwünschte Nebenwirkungen (die im Dokument nicht angegeben sind).

Zum Beispiel könnte eine prozessmäßige Sperre sehr wohl alle Threads des Prozesses blockieren. Und wenn dies nicht der Fall ist, kann das Freigeben einer Sperre die Threads des Prozesses möglicherweise nicht aufwecken.

Kurz gesagt, wenn Sie möchten, dass Ihr Code sicher funktioniert, sollten Sie die Thread-Synchronisations-Primitive verwenden, wenn Sie Threads und die Prozess-Synchronisations-Primitive verwenden, wenn Sie Prozesse verwenden. Andernfalls funktioniert es möglicherweise nur auf Ihrer Plattform oder nur mit Ihrer speziellen Version von Python.

0

multiprocessing und threading Pakete haben leicht unterschiedliche Ziele, obwohl beide mit dem gemeinsamen Zugriff verwandt sind. threading koordiniert Threads innerhalb eines Prozesses, während multiprocessing eine Thread-ähnliche Schnittstelle für die Koordination mehrerer Prozesse bietet.

Wenn Ihre Anwendung keine neuen Prozesse erzeugt, die eine Datensynchronisation erfordern, ist multiprocessing ein etwas schwereres Gewicht, und das threading Paket sollte besser geeignet sein.

+0

Ich verstehe den Unterschied zwischen Threading und Multiprozessing. Ich war neugierig, warum man die Synchronisations-Primitive von Threads über Multiprocessing verwenden möchte. –

Verwandte Themen