Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Paralelisme dalam Python: Melepaskan Kuasa Berbilang Teras?

Bagaimana untuk Melaksanakan Paralelisme dalam Python: Melepaskan Kuasa Berbilang Teras?

DDD
DDDasal
2024-10-22 20:05:01892semak imbas

How to Implement Parallelism in Python: Unleashing Multi-Core Power?

Soalan: Memeluk Paralelisme dalam Python

Dalam C , OpenMP menyediakan sokongan teguh untuk pengaturcaraan selari. Walau bagaimanapun, Python kekurangan alat mudah ini. Bagaimanakah kita mencapai keselarian dalam program Python, terutamanya dalam senario di mana fungsi bebas memerlukan penyelarasan?

Pertimbangkan struktur kod berikut:

<code class="python">solve1(A)
solve2(B)</code>

Di mana solve1 dan solve2 ialah fungsi bebas. Matlamatnya adalah untuk melaksanakan kod ini secara selari, meminimumkan masa pelaksanaan.

Mari kita terokai coretan kod yang disediakan:

<code class="python">def solve(Q, G, n):
    i = 0
    tol = 10 ** -4

    while i < 1000:
        inneropt, partition, x = setinner(Q, G, n)
        outeropt = setouter(Q, G, n)

        if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) < tol:
            break
            
        node1 = partition[0]
        node2 = partition[1]
    
        G = updateGraph(G, node1, node2)

        if i == 999:
            print "Maximum iteration reaches"
    print inneropt</code>

Kami menyasarkan untuk menyelaraskan fungsi setinner dan setouter.

Jawapan: Melancarkan Kuasa Selari dengan Modul Berbilang Pemprosesan

Modul berbilang pemprosesan menawarkan penyelesaian yang berkuasa untuk pengaturcaraan selari dalam Python. Ia membolehkan kami menghasilkan berbilang proses yang boleh melaksanakan tugas secara serentak, menggunakan kuasa pemprosesan berbilang teras CPU.

Untuk kod yang disediakan, kumpulan pemprosesan boleh digunakan. Begini caranya:

<code class="python">from multiprocessing import Pool

pool = Pool()
result1 = pool.apply_async(solve1, [A])    # evaluate "solve1(A)" asynchronously
result2 = pool.apply_async(solve2, [B])    # evaluate "solve2(B)" asynchronously
answer1 = result1.get(timeout=10)
answer2 = result2.get(timeout=10)</code>

Coretan kod ini mencipta kumpulan proses yang akan melaksanakan fungsi solve1 dan solve2 secara tidak segerak. Setiap teras CPU boleh melaksanakan satu proses secara serentak, dengan berkesan mengurangkan masa pelaksanaan.

Cara alternatif untuk menyelaraskan tugasan ialah dengan menggunakan fungsi peta:

<code class="python">args = [A, B]
results = pool.map(solve1, args)</code>

Pendekatan ini menggunakan fungsi solve1 untuk setiap elemen dalam senarai args secara selari.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa urutan tidak boleh digunakan untuk pengaturcaraan selari dalam Python. Ini kerana GIL (Global Interpreter Lock) menghalang berbilang benang daripada melaksanakan kod bait Python secara serentak, pada asasnya menafikan sebarang potensi manfaat selari.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Paralelisme dalam Python: Melepaskan Kuasa Berbilang Teras?. 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