Heim > Backend-Entwicklung > Python-Tutorial > Operful Python -Techniken für Multithreading und Multiprocessing: Steigern Sie Ihre App -Leistung

Operful Python -Techniken für Multithreading und Multiprocessing: Steigern Sie Ihre App -Leistung

Linda Hamilton
Freigeben: 2025-01-27 18:12:14
Original
481 Leute haben es durchsucht

owerful Python Techniques for Multithreading and Multiprocessing: Boost Your App Performance

Auf meiner Amazon-Autorenseite finden Sie eine große Auswahl an Büchern. Folgen Sie mir auf Medium für weitere Einblicke und Updates! Ihre Unterstützung wird sehr geschätzt.

Nutzen Sie die Leistungsfähigkeit der Multithreading- und Multiprocessing-Funktionen von Python, um die Geschwindigkeit und Effizienz Ihrer Anwendung erheblich zu verbessern. Dieser Leitfaden stellt acht wesentliche Techniken vor, um diese Funktionen effektiv zu nutzen.

Threading eignet sich hervorragend für E/A-gebundene Vorgänge. Das threading-Modul von Python bietet eine benutzerfreundliche Oberfläche für die Thread-Verwaltung. So laden Sie mehrere Dateien gleichzeitig herunter:

import threading
import requests

def download_file(url):
    response = requests.get(url)
    filename = url.split('/')[-1]
    with open(filename, 'wb') as f:
        f.write(response.content)
    print(f"Downloaded {filename}")

urls = ['http://example.com/file1.txt', 'http://example.com/file2.txt', 'http://example.com/file3.txt']

threads = []
for url in urls:
    thread = threading.Thread(target=download_file, args=(url,))
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

print("All downloads complete")
Nach dem Login kopieren

Dieser Code weist jeden Download einem separaten Thread zu und ermöglicht so die gleichzeitige Ausführung.

Für CPU-gebundene Aufgaben ist das Modul multiprocessing aufgrund des Global Interpreter Lock (GIL) von Python überlegen. Durch Multiprocessing werden unabhängige Prozesse erstellt, von denen jeder seinen eigenen Speicherplatz und seine eigene GIL hat, wodurch die Einschränkungen der GIL umgangen werden. Hier ist ein Beispiel für eine parallele Berechnung:

import multiprocessing

def calculate_square(number):
    return number * number

if __name__ == '__main__':
    numbers = range(10)

    with multiprocessing.Pool() as pool:
        results = pool.map(calculate_square, numbers)

    print(results)
Nach dem Login kopieren

Dabei wird ein Prozesspool genutzt, um Berechnungen effizient zu verteilen.

Das concurrent.futures-Modul bietet eine Abstraktion auf höherer Ebene für die asynchrone Aufgabenausführung und arbeitet nahtlos mit Threads und Prozessen zusammen. Hier ist ein Beispiel mit ThreadPoolExecutor:

from concurrent.futures import ThreadPoolExecutor
import time

def worker(n):
    print(f"Worker {n} starting")
    time.sleep(2)
    print(f"Worker {n} finished")

with ThreadPoolExecutor(max_workers=3) as executor:
    executor.map(worker, range(5))

print("All workers complete")
Nach dem Login kopieren

Dadurch wird ein Thread-Pool zur Verwaltung von fünf Worker-Aufgaben erstellt.

Für asynchrone E/A glänzt das Modul asyncio, das eine effiziente asynchrone Programmierung mit Coroutinen ermöglicht. Hier ist ein Beispiel:

import asyncio
import aiohttp

async def fetch_url(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    urls = ['http://example.com', 'http://example.org', 'http://example.net']
    tasks = [fetch_url(url) for url in urls]
    results = await asyncio.gather(*tasks)
    for url, result in zip(urls, results):
        print(f"Content length of {url}: {len(result)}")

asyncio.run(main())
Nach dem Login kopieren

Dadurch werden Inhalte effizient von mehreren URLs gleichzeitig abgerufen.

Der Datenaustausch zwischen Prozessen erfordert spezielle Tools. Das Modul multiprocessing bietet Mechanismen wie Value für Shared Memory:

from multiprocessing import Process, Value
import time

def increment(counter):
    for _ in range(100):
        with counter.get_lock():
            counter.value += 1
        time.sleep(0.01)

if __name__ == '__main__':
    counter = Value('i', 0)
    processes = [Process(target=increment, args=(counter,)) for _ in range(4)]

    for p in processes:
        p.start()

    for p in processes:
        p.join()

    print(f"Final counter value: {counter.value}")
Nach dem Login kopieren

Dies zeigt die sichere Zählererhöhung über mehrere Prozesse hinweg.

Thread-Synchronisierung verhindert Race Conditions, wenn mehrere Threads auf gemeinsam genutzte Ressourcen zugreifen. Python bietet Synchronisierungsprimitive wie Lock:

import threading

class Counter:
    def __init__(self):
        self.count = 0
        self.lock = threading.Lock()

    def increment(self):
        with self.lock:
            self.count += 1

def worker(counter, num_increments):
    for _ in range(num_increments):
        counter.increment()

counter = Counter()
threads = []
for _ in range(5):
    thread = threading.Thread(target=worker, args=(counter, 100000))
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

print(f"Final count: {counter.count}")
Nach dem Login kopieren

In diesem Beispiel wird eine Sperre verwendet, um atomare Zählererhöhungen sicherzustellen.

ProcessPoolExecutor ist ideal für CPU-gebundene Aufgaben. Hier ist ein Beispiel zum Finden von Primzahlen:

from concurrent.futures import ProcessPoolExecutor
import math

def is_prime(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True

if __name__ == '__main__':
    numbers = range(100000)
    with ProcessPoolExecutor() as executor:
        results = list(executor.map(is_prime, numbers))
    print(sum(results))
Nach dem Login kopieren

Dadurch wird die Primzahlprüfung auf mehrere Prozesse verteilt.

Die Auswahl zwischen Multithreading und Multiprocessing hängt von der Aufgabe ab. I/O-gebundene Aufgaben profitieren von Multithreading, während CPU-gebundene Aufgaben häufig eine Multiprozessierung für echte Parallelität erfordern. Lastausgleich und Aufgabenabhängigkeiten sind entscheidende Überlegungen zur parallelen Verarbeitung. Angemessene Synchronisationsmechanismen sind im Umgang mit gemeinsamen Ressourcen von wesentlicher Bedeutung. Leistungsvergleiche variieren je nach Aufgabe und System. Bei der Datenverarbeitung und wissenschaftlichen Computing kann die Multiprozessierung sehr effektiv sein. Für Webanwendungen bietet asyncio effizientes Umgang mit gleichzeitigen Verbindungen. Pythons vielfältige Parallelverarbeitungswerkzeuge ermöglichen Entwicklern, Hochleistungsanwendungen zu erstellen.


101 Bücher

101 Bücher , ein von Autor aarav joshi mit dem KI betriebener Verlag, bietet erschwingliche, hochwertige Bücher-ein Preis-Preis-Preis von nur günstig wie $ 4 .

Entdecken Sie unser Golang Clean Code Buch bei Amazon. Suchen Sie nach aarav joshi , um mehr Titel und Sonderrabatte zu finden!

unsere anderen Projekte

Erforschen Sie unsere anderen Projekte: Investor Central (Englisch, Spanisch, Deutsch), Smart Living , Epochen & Echoes , rätselhafte Mysterien , hindutva , Elite dev und js schulen .


Folgen Sie uns auf Medium

Verbinden Sie sich mit uns auf Medium: Tech Koala Insights , Epochen und Echoes World , Investor Central Medium , rätselhafte Mysterien mittel , Wissenschaft & Epochen Medium und moderne Hindutva .

Das obige ist der detaillierte Inhalt vonOperful Python -Techniken für Multithreading und Multiprocessing: Steigern Sie Ihre App -Leistung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage