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

DDD
Lepaskan: 2024-10-22 20:05:01
asal
889 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!