Mitmiktöötlus on Pythoni programmeerimises populaarne tehnika, mis võimaldab käivitada mitut protsessi samaaegselt, mille tulemuseks on sageli jõudluse paranemine ja süsteemiressursside tõhusam kasutamine. See artikkel käsitleb selle kasutamist multitöötlus raamatukogu Pythonis, keskendudes konkreetselt sellele kaart funktsiooni. Kaardifunktsioon võimaldab teil rakendada itereeritava iga üksuse (nt loendi) jaoks funktsiooni ja tagastada uue loendi koos tulemustega. Multitöötlust võimendades saame selle protsessi suurema tõhususe ja mastaapsuse tagamiseks paralleelseks muuta.
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.
Lahendus on kasutada Pythonis mitmetöötluse teeki, täpsemalt Piljard klass ja see kaart meetod. Kasutades multiprocessing Pool.map() funktsioon, saame jaotada oma funktsiooni täitmise 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)
- Esiteks importige multitöötlus moodul, mis sisaldab Pythonis paralleeltöötluse kasutamiseks vajalikke tööriistu.
- 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.
- Looge loend nimega numbrid, mis sisaldab täisarve vahemikus 0 kuni 9 (kaasa arvatud).
- Initsialiseeri a Piljard objekt mitmetöötlusmoodulist. Plaadiobjekt toimib vahendina tööprotsesside haldamiseks, mida kasutate oma ülesannete paralleelseerimiseks.
- 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.
- Printige tulemuseks ruudus_arvude loend, mis peaks sisaldama arvude loendi ruuduväärtusi.
Pythoni mitmetöötluse teek
Python multitöötlus raamatukogu pakub intuitiivset vahendit paralleelsuse rakendamiseks teie programmis. See varjab osa paralleelprogrammeerimisega tavaliselt seotud keerukusest, pakkudes kõrgetasemelisi abstraktsioone, nagu näiteks Piljard. Pooli klass lihtsustab töö jaotamist mitme protsessi vahel, võimaldades kasutajal minimaalse vaevaga kogeda paralleeltöötluse eeliseid.
Python Itertoolsi moodul ja sellega seotud funktsioonid
Kuigi mitmetöötlus on suurepärane lahendus paljude paralleelsete ülesannete jaoks, tasub mainida, et Python pakub ka muid teeke ja tööriistu, mis vastavad sarnastele vajadustele. Näiteks itertoorsi moodul pakub palju funktsioone, mis töötavad itereeritavatel funktsioonidel, sageli suurema tõhususega. Mõned itertitööriistad toimivad nagu imap() ja imap_unordered() saab paralleelstada funktsiooni rakendamise protsessi itereeritavale. Siiski on oluline märkida, et itertools keskendub peamiselt iteraatoripõhistele lahendustele, samas kui multitöötlusteek pakub paralleelsusele terviklikumat lähenemist, pakkudes lisaks kaardilaadsetele funktsioonidele täiendavaid tööriistu ja võimalusi.