Lahendatud: multitöötluskaart

Viimane uuendus: 09/11/2023

Mitmeprotsessoriline protsess on Pythoni programmeerimises populaarne tehnika, mis võimaldab teil käivitada mitu protsessi samaaegselt, mis sageli toob kaasa jõudluse paranemise ja süsteemiressursside tõhusama kasutamise. See artikkel süveneb Pythoni mitmeprotsessorilise teeki kasutamisse, keskendudes eriti kaardifunktsioonile . Kaardifunktsioon võimaldab teil rakendada funktsiooni igale itereeritava objekti, näiteks loendi, üksusele ja tagastada tulemustega uue loendi. Mitmeprotsessorilise protsessi ärakasutamise abil saame selle protsessi paralleelseks muuta, et saavutada suurem efektiivsus ja skaleeritavus.

Selles artiklis uurime probleemi, millele kaardifunktsiooniga multitöötlus võib olla suurepärane lahendus, arutleme asjakohaste teekide ja funktsioonide üle, anname koodi samm-sammult selgituse ja süveneme seotud teemadesse, mis tuginevad selgroole. multitöötlus ja kaardifunktsioon.

Mitmetöötluse kaart: probleem ja lahendus

Probleem, mida me püüame lahendada, on parandada funktsiooni rakendamise jõudlust ja tõhusust igale suure itereeritava üksuse (nt loendi, korteeži või mõne muu iteratsiooni toetava objekti) üksusele. Selliste ülesannetega silmitsi seistes võib sisseehitatud kaardifunktsiooni või loendi mõistmine olla üsna aeglane ja ebaefektiivne.

Lahenduseks on Pythoni mitmeprotsessilise teeki, täpsemalt Pool- klassi ja selle map- meetodi kasutamine. Mitmeprotsessilise Pool.map() funktsiooni abil saame oma funktsiooni täitmise jaotada mitme protsessi vahel.

Koodeksi samm-sammult selgitus

Jagame koodi lahti ja illustreerime, kuidas mitmetöötlusega kaardifunktsiooni tõhusalt kasutada:

import multiprocessing
import time

def square(n):
    time.sleep(0.5)
    return n * n

# Create the list of numbers
numbers = list(range(10))

# Initialize the multiprocessing Pool
pool = multiprocessing.Pool()

# Use the map function with multiple processes
squared_numbers = pool.map(square, numbers)

print(squared_numbers)
  1. Esiteks importige multitöötlus moodul, mis sisaldab Pythonis paralleeltöötluse kasutamiseks vajalikke tööriistu.
  2. Looge funktsioon nimega ruut mis lihtsalt magab pool sekundit ja tagastab seejärel oma sisendargumendi ruudu. See funktsioon simuleerib arvutust, mille tegemiseks kulub mõistlikult aega.
  3. Looge loend nimega numbrid, mis sisaldab täisarve vahemikus 0 kuni 9 (kaasa arvatud).
  4. Initsialiseeri a Piljard objekt mitmetöötlusmoodulist. Plaadiobjekt toimib vahendina tööprotsesside haldamiseks, mida kasutate oma ülesannete paralleelseerimiseks.
  5. Helistage kaart meetod basseini objektil ja sisestage ruut funktsioon ja numbrid nimekirja. Seejärel rakendab kaardimeetod ruudufunktsiooni numbriloendi igale üksusele samaaegselt, kasutades kogumis saadaolevaid tööprotsesse.
  6. Printige tulemuseks ruudus_arvude loend, mis peaks sisaldama arvude loendi ruuduväärtusi.

Pythoni mitmetöötluse teek

Pythoni mitmeprotsessiline teek pakub intuitiivset viisi paralleelsuse rakendamiseks programmis. See varjab osa paralleelprogrammeerimisega tavaliselt kaasnevast keerukusest, pakkudes kõrgetasemelisi abstraktsioone nagu Pool . Pool-klass lihtsustab töö jaotust mitme protsessi vahel, võimaldades kasutajal kogeda paralleelse töötlemise eeliseid minimaalse vaevaga.

Python Itertoolsi moodul ja sellega seotud funktsioonid

Kuigi mitmeprotsessoriline lähenemine on suurepärane lahendus paljude paralleelsete ülesannete jaoks, väärib mainimist, et Python pakub ka teisi teeke ja tööriistu, mis vastavad sarnastele vajadustele. Näiteks itertools moodul pakub hulgaliselt funktsioone, mis töötavad itereeritavatel objektidel, sageli parema efektiivsusega. Mõned itertools funktsioonid, näiteks imap() ja imap_unordered(), suudavad funktsiooni itereeritavale objektile rakendamise protsessi paralleelseks muuta. Siiski on oluline märkida, et itertools keskendub peamiselt iteraatoripõhistele lahendustele, samas kui mitmeprotsessoriline teek pakub paralleelsusele terviklikumat lähenemisviisi, pakkudes lisaks kaardilaadsetele funktsioonidele ka täiendavaid tööriistu ja võimalusi.

Seonduvad postitused: