Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Berkongsi Tatasusunan Besar, Baca Sahaja dan Objek Python dalam Multiprocessing tanpa Overhed Memori?

Bagaimana untuk Berkongsi Tatasusunan Besar, Baca Sahaja dan Objek Python dalam Multiprocessing tanpa Overhed Memori?

Barbara Streisand
Barbara Streisandasal
2024-11-03 20:19:03480semak imbas

How to Share Large, Read-Only Arrays and Python Objects in Multiprocessing without Memory Overhead?

Objek Memori Dikongsi dalam Multiprocessing

Soalan:

Dalam multiprocessing, bagaimana anda boleh berkongsi yang besar, baca- hanya tatasusunan atau sebarang objek Python sewenang-wenangnya merentas berbilang proses tanpa menimbulkan overhed memori?

Jawapan:

Dalam sistem pengendalian yang menggunakan semantik copy-on-write fork(), struktur data yang tidak diubah kekal tersedia untuk semua proses kanak-kanak tanpa penggunaan memori tambahan. Hanya pastikan objek kongsi kekal tidak diubah suai.

Untuk Tatasusunan:

Pendekatan Cekap:

  1. Pak tatasusunan ke dalam struktur tatasusunan yang cekap (cth., tatasusunan numpy).
  2. Letakkan tatasusunan dalam memori kongsi.
  3. Balut tatasusunan yang dikongsi dengan berbilang pemprosesan. Tatasusunan.
  4. Luluskan tatasusunan yang dikongsi tatasusunan ke fungsi anda.

Objek Kongsi Boleh Tulis:

  • Memerlukan penyegerakan atau penguncian.
  • pemprosesan berbilang menyediakan dua kaedah:

    • Memori dikongsi: Sesuai untuk nilai mudah, tatasusunan atau ctypes (pantas).
    • Proksi pengurus: Penahanan proses ingatan dan pengurus menimbang tara akses daripada orang lain (lebih perlahan disebabkan penyirian/penyahserialisasian).

Objek Python Arbitrari:

  • Gunakan pendekatan proksi Pengurus.
  • Lebih perlahan daripada memori dikongsi disebabkan oleh overhed komunikasi.

Kebimbangan Pengoptimuman:

Ofhed diperhatikan dalam coretan kod yang disediakan bukan disebabkan oleh penyalinan memori. Sebaliknya, ia berpunca daripada pensirilan/penyahserialisasian argumen fungsi (tatasusunan arr), yang dikenakan penalti prestasi apabila menggunakan proksi Pengurus.

Atas ialah kandungan terperinci Bagaimana untuk Berkongsi Tatasusunan Besar, Baca Sahaja dan Objek Python dalam Multiprocessing tanpa Overhed Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn