自学内容网 自学内容网

Python 中的多线程和多处理

一.介绍

在本文中,我们将探讨 Python 中多线程和多处理的使用。在当今的多核处理器世界中,利用并发编程技术对于优化性能至关重要。Python 提供了两个强大的并行执行模块:用于多线程的线程和用于多处理的多处理。

二.Python 中的多线程

多线程允许多个线程在单个进程内同时运行。它对于 I/O 密集型任务特别有用,因为程序会花费大量时间等待外部操作。我们以使用多线程进行 Web 抓取为例。

示例。让我们创建一个简单的网络抓取工具,它可以同时从多个 URL 下载内容。在运行以下示例之前,您必须使用 pip install request 安装请求包。

import threading
import requests
import time

def download_content(url):
    response = requests.get(url)
    print(f"Downloaded {len(response.content)} bytes from {url}")

urls = [
    "https://www.python.org",
    "https://www.github.com",
]

start_time = time.time()

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

for thread in threads:
    thread.join()

end_time = time.time()
print(f"Total execution time: {end_time - start_time:.2f} seconds")

上述 Python 代码为每个 URL 创建一个单独的线程,允许并发下载。 join() 方法确保在程序退出之前所有线程都完成。

三.Python 中的多处理

虽然多线程受到 CPython 中的全局解释器锁 (GIL) 的限制,但多处理可以通过生成单独的 Python 进程来充分利用多个 CPU 核心。让我们以使用多个进程计算素数为例。

示例。让我们使用多个进程来计算素数。

import multiprocessing
import time

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

def find_primes(start, end):
    return [num for num in range(start, end) if is_prime(num)]

if __name__ == "__main__":
    start_time = time.time()

    pool = multiprocessing.Pool(processes=4)
    ranges = [(1, 25000), (25001, 50000), (50001, 75000), (75001, 100000)]
    results = pool.starmap(find_primes, ranges)

    all_primes = [prime for sublist in results for prime in sublist]

    end_time = time.time()
    print(f"Found {len(all_primes)} prime numbers")
    print(f"Total execution time: {end_time - start_time:.2f} seconds")

上述 Python 代码使用工作进程池将素数计算分布在多个 CPU 核心上。

四.在多线程和多处理之间进行选择

  • 使用多线程执行 I/O 密集型任务(例如,网络操作、文件 I/O)。
  • 对于需要并行计算的 CPU 密集型任务,请使用多处理。
  • 多线程对系统资源的占用较小,但受到 GIL 的限制。
  • 多处理的开销较大,但可以充分利用多个 CPU 核心。

五.概括

多线程和多处理都是提高 Python 应用程序性能的强大工具。通过了解它们的优势和用例,您可以根据自己的特定需求选择正确的方法。


原文地址:https://blog.csdn.net/xiefeng240601/article/details/140653059

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!