Heim > Backend-Entwicklung > Python-Tutorial > Wie kann man große schreibgeschützte Daten in Python-Multiprocessing effizient teilen?

Wie kann man große schreibgeschützte Daten in Python-Multiprocessing effizient teilen?

Linda Hamilton
Freigeben: 2024-10-24 18:45:50
Original
790 Leute haben es durchsucht

How to Share Large Readonly Data Efficiently in Python Multiprocessing?

Verwaltung gemeinsam genutzter schreibgeschützter Daten im Multiprocessing

Frage:

In einer Python-Multiprocessing-Umgebung Wie kann sichergestellt werden, dass ein großes schreibgeschütztes Array (z. B. 3 GB) von mehreren Prozessen gemeinsam genutzt wird, ohne Kopien zu erstellen?

Antwort:

Nutzung der von der bereitgestellten Shared-Memory-Funktionen Das Multiprocessing-Modul ermöglicht in Verbindung mit NumPy einen effizienten Datenaustausch zwischen Prozessen.

<code class="python">import multiprocessing
import ctypes
import numpy as np

shared_array_base = multiprocessing.Array(ctypes.c_double, 10*10)
shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())
shared_array = shared_array.reshape(10, 10)</code>
Nach dem Login kopieren

Dieser Ansatz nutzt die Tatsache, dass Linux die Copy-on-Write-Semantik für fork() verwendet, um sicherzustellen, dass Daten nur dann dupliziert werden, wenn modifiziert. Dadurch werden die Daten auch ohne explizite Verwendung des multiprocessing.Array effektiv zwischen Prozessen gemeinsam genutzt, sofern sie nicht geändert werden.

<code class="python"># Parallel processing
def my_func(i, def_param=shared_array):
    shared_array[i,:] = i

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=4)
    pool.map(my_func, range(10))

    print(shared_array)</code>
Nach dem Login kopieren

Dieser Code ändert gleichzeitig das gemeinsam genutzte Array und demonstriert die erfolgreiche gemeinsame Nutzung von Daten zwischen mehreren Prozessen:

[[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
 [ 2.  2.  2.  2.  2.  2.  2.  2.  2.  2.]
 [ 3.  3.  3.  3.  3.  3.  3.  3.  3.  3.]
 [ 4.  4.  4.  4.  4.  4.  4.  4.  4.  4.]
 [ 5.  5.  5.  5.  5.  5.  5.  5.  5.  5.]
 [ 6.  6.  6.  6.  6.  6.  6.  6.  6.  6.]
 [ 7.  7.  7.  7.  7.  7.  7.  7.  7.  7.]
 [ 8.  8.  8.  8.  8.  8.  8.  8.  8.  8.]
 [ 9.  9.  9.  9.  9.  9.  9.  9.  9.  9.]]
Nach dem Login kopieren

Durch die Nutzung von Shared Memory und Copy-on-Write-Semantik bietet dieser Ansatz eine effiziente Lösung für die gemeinsame Nutzung großer Mengen schreibgeschützter Daten zwischen Prozessen in einer Multiprozessorumgebung.

Das obige ist der detaillierte Inhalt vonWie kann man große schreibgeschützte Daten in Python-Multiprocessing effizient teilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage