了解 Python 中的多线程和多处理

liftword1个月前 (03-31)技术文章8

在软件开发领域,提高应用程序的效率和性能通常是通过多线程或多处理来实现的。这些技术允许程序同时执行多个任务,从而更好地利用系统资源并加快执行时间。在 Python 中,多线程和多处理都可用于不同的场景并很有用,了解它们的细微差别可以显着增强您的编程项目。

什么是多线程?

多线程涉及单个进程创建多个线程以并发执行任务。在 Python 中,线程最适合用于 I/O 密集型任务,例如文件操作、网络请求或在图形用户界面中处理用户输入。这是因为线程共享相同的内存空间,并且可以有效地管理需要等待或休眠的任务,从而允许其他线程在这些空闲时间运行。

多线程示例:

考虑一个简单的示例,需要同时下载多个 Web 页面。使用 Python 的 'threading' 模块,您可以生成多个线程,每个线程负责下载网页。

import threading
import requests

def download_page(url):
    response = requests.get(url)
    print(f"Downloaded {url} with status {response.status_code}")

urls = [
    "http://example.com",
    "http://example.org",
    "http://example.net"
]

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

for thread in threads:
    thread.join()

在此示例中,对 'download_page' 的每个调用都在其自己的线程中运行。'start()' 方法开始线程的活动,'join()' 确保主程序等待所有线程完成后再继续。

什么是多处理?

与多线程不同,多处理涉及使用多个进程,每个进程都在自己的内存空间中运行。这种方法适用于需要大量计算的 CPU 密集型任务,并且可以并行化以在多核处理器上运行得更快。由于每个进程都有自己的内存空间,因此此方法避免了 Python 中的全局解释器锁 (GIL),该锁限制一次执行一个线程。

多处理示例:

看一个示例,需要计算一个大型列表中每个数字的平方。通过将任务划分到多个进程中,您可以利用多个 CPU 内核更快地执行计算。

import multiprocessing

def compute_square(number):
    return number * number

def worker(numbers, output):
    result = map(compute_square, numbers)
    output.put(list(result))

if __name__ == "__main__":
    numbers = range(10000)
    output = multiprocessing.Queue()
    processes = []
    # Divide work into 4 batches
    batches = [numbers[i::4] for i in range(4)]
    
    for batch in batches:
        process = multiprocessing.Process(target=worker, args=(batch, output))
        process.start()
        processes.append(process)
    
    for process in processes:
        process.join()
    
    # Collect results
    results = []
    while not output.empty():
        results.extend(output.get())
    print("Results collected, processing completed")

此多处理示例将数字列表分为四个批次,并将每个批次分配给单独的进程。每个进程计算平方并将结果存储在多进程 'Queue' 中。在所有进程加入(即 complete)后,主进程将收集所有结果。

何时使用多线程与多处理

- 对 I/O 绑定的任务或涉及等待外部事件的任务使用多线程。它对网络爬虫、网络服务器或用户界面等应用程序有效。
-
将多处理用于受益于并行计算的 CPU 密集型任务,例如视频处理、繁重的计算或需要拆分以在多个内核上同时运行的任务。

多线程和多处理都是 Python 中的强大工具,有助于通过并行化任务来优化程序性能。在它们之间进行选择取决于任务的性质和系统架构。通过整合这些技术,Python 开发人员可以显著提高其应用程序的效率和响应能力。

相关文章

python笔记47:多线程详解

主要内容:小目标:掌握多线程;主要内容:线程类使用,多线程使用;1. 线程基本概念线程概念:线程是轻量级进程,是操作系统能够进行运算调度的最小单位;线程依赖进程资源,是进程中的实际运作单位;一个进程中...

Python中的多线程详解,让你的程序飞起来!

Python是一门高级编程语言,拥有简单易用、面向对象、可扩展等优点,因此被广泛应用于各种领域。但是在Python中,由于GIL(全局解释器锁)的存在,导致了多线程的效率不高。但是,对于某些IO密集型...

Python并发编程(3)——Python多线程详解介绍

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取python编程资料Python 的多线程入门是非常简单的,直接导入threading模块就可以开始多线程...

小白都看懂了,Python 中的线程和进程精讲,建议收藏

目录线程和进程一、 什么是进程 / 线程1、 引论众所周知,CPU是计算机的核心,它承担了所有的计算任务。而操作系统是计算机的管理者,是一个大管家,它负责任务的调度,资源的分配和管理,统领整个计算机硬...

Python多线程

本文重点探究以下几个问题:多线程内存共享线程类获取线程结果方法:join/setDaemon对线程退出的作用线程无法利用多核,不是真正的并发多线程内存共享多个线程访问同一内存变量时,需要通过锁机制来实...