Ich habe mich über Parallelität und gemeinsam genutzten Speicher im SysV- und POSIX-Stil im Allgemeinen und über das Multiprocessing-Paket von Python im Besonderen informiert. Jetzt habe ich ein paar Fragen, bei denen mich mein Google-Fu bisher nicht weitergebracht hat:
Q1 Soweit ich dieses Problem im Python-Bugtracker verstehe, verwendet das kürzlich eingeführte multiprocessing.shared_memory.SharedMemory den POSIX-Namen Shared Memory. Wenn es um Typen wie RawArray und RawValue geht, die in multiprocessing.sharedctypes definiert sind, lassen die Python-Dokumente jedoch viel zu wünschen übrig. Wie werden sie intern implementiert?
F2 Ist der einzige praktische Unterschied beispielsweise zwischen einem RawArray('B') und einer Instanz von multiprocessing.shared_memory.SharedMemory, dass letztere einen Namen hat und auch von nicht verwandten (möglicherweise nicht Python) Prozessen aus zugänglich ist? Ist ihre Leistung vergleichbar?
F3 Wie genau werden Multiprocessing-Sperren in Python implementiert? Müssen sie nicht auch eine Art gemeinsames Gedächtnis verwenden? In den Dokumenten heißt es:
Hinweis
Einige Funktionen dieses Pakets erfordern eine funktionierende Shared-
Semaphor-Implementierung auf dem Host-Betriebssystem. Ohne eines wird
das Modul multiprocessing.synchronize deaktiviert und Versuche
, es zu importieren, führen zu einem ImportError. Weitere Informationen finden Sie unter bpo-3770.
(Beachten Sie, dass multiprocessing.Lock tatsächlich von multiprocessing.synchronize.Lock stammt.) Gemäß der verknüpften Ausgabe bpo-3770 verwendet Lock nun shm_open() von libc, das ein benanntes Semaphor erstellt. Funktioniert das ähnlich wie SharedMemory?
Aktualisierung: Laut Quellcode – insbesondere diese Zeilen: Link 1, Link 2 (Danke, Bnaecker!) – werden RawArray und RawValue auf Nicht-Windows-Systemen einfach mithilfe einer temporären Datei implementiert, die (zumindest unter Linux) in einem Verzeichnis abgelegt wird, das nicht durch Speicher gesichert ist, nämlich /dev/shm. Dies scheint dann der Funktionsweise von POSIX Shared Storage, d. h. SharedMemory, sehr ähnlich zu sein. Daher sollte ich meine Frage Q1 wohl durch die folgende ersetzen: Warum wurde shared_memory überhaupt eingeführt, wenn RawArray so ähnlich ist? Das oben erwähnte Problem erwähnt von Anfang an Leistungsgründe, aber ich verstehe nicht, woher dieser Leistungsunterschied (zumindest unter Linux) kommen soll?
Multiprocessing: Wie funktionieren Sharedctypes (RawArray, RawValue) intern, wie vergleichen sie sich mit SharedMemory u ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Wie funktioniert der Attributzugriff (.) eigentlich intern? [geschlossen]
by Anonymous » » in Python - 0 Replies
- 22 Views
-
Last post by Anonymous
-
Mobile version