Python 多线程和多进程:简单解释

360影视 欧美动漫 2025-04-28 06:04 3

摘要:程序是一组用编程语言(如 Python、C++或 Java)编写的指令集合。常见的程序示例包括 Google Chrome、Microsoft Word 和 Excel。

程序是一组用编程语言(如 Python、C++或 Java)编写的指令集合。常见的程序示例包括 Google Chrome、Microsoft Word 和 Excel。

进程是正在执行程序的实例。进程需要资源,例如:

代码段 :包含可执行指令。数据段 :存储全局和静态变量。:管理动态内存分配。:管理对局部变量和函数调用的访问,存储局部变量,并跟踪执行顺序。寄存器 :CPU 内部的小型、高速存储位置,临时存储变量和用于即时处理的逻辑。

注意,一个进程不能破坏另一个进程,这确保了稳定性和安全性。

线程是进程内的一个执行单元。线程共享进程的同一内存空间(代码、数据、堆),但每个线程都有自己的栈来管理局部变量和函数调用。寄存器是 CPU 架构的一部分,在执行过程中由线程使用,但不属于任何单个线程。线程可以是单线程或多线程。

单线程包括自己的栈来管理局部变量和函数调用。例如,在 MS Paint 中创建形状通常涉及一个单独的线程,该线程独立处理任务,同时利用共享的程序资源,如代码指令、全局数据和动态内存分配。

多线程与此类似,但每个线程都有自己的栈和访问寄存器的权限,同时共享父进程的同一代码、数据和堆。例如,网络浏览器广泛使用多线程——一个线程管理用户界面,另一个线程加载内容,每个线程都利用共享资源。

import threadingimport timedef print_numbers: for i in range(5): time.sleep(2) print(f"Number: {i}")def print_letters: for letter in "abcde": time.sleep(2) print(f"Letter: {letter}")start_time = time.time# Without threading (runs sequentially)# print_numbers# print_letter# With threading (runs in parallel)# Threads running concurrentlyt1 = threading.Thread(target=print_numbers)t2 = threading.Thread(target=print_letters)t1.startt2.startt1.joint2.joinprint(f"Execution Time: {time.time - start_time} seconds")

多进程允许多个进程并行运行,利用多个 CPU 核心。

何时使用多进程:

import multiprocessingimport timedef square_numbers: for i in range(5): time.sleep(1) print(f"Square: {i * i}")def cube_numbers: for i in range(5): time.sleep(1.5) print(f"Cube: {i * i * i}")if __name__ == "__main__": # Create 2 processes p1 = multiprocessing.Process(target=square_numbers) p2 = multiprocessing.Process(target=cube_numbers) start_time = time.time # Start the processes p1.start p2.start # Wait for the processes to complete p1.join p2.join print(f"Execution Time: {time.time - start_time} seconds")线程池执行器

线程池执行器通过自动将任务分配给固定数量的线程或进程来简化线程和进程管理。而不是为每个任务创建一个新的线程,线程池会重用一定数量的线程。这有助于您的程序运行得更顺畅,并使用更少的内存,尤其是在处理大量任务时。

from concurrent.futures import ThreadPoolExecutorimport timedef print_number(number): time.sleep(1) return f"Number: {number}"numbers = [1, 2, 3, 4, 5]with ThreadPoolExecutor(max_workers=3) as executor: results = executor.map(print_number, numbers)for result in results: print(result)from concurrent.futures import ProcessPoolExecutorimport timedef square_number(number): time.sleep(2) return f"Square: {number * number}"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 2, 3, 12, 14]if __name__ == "__main__": with ProcessPoolExecutor(max_workers=3) as executor: results = executor.map(square_number, numbers) for result in results: print(result)

许多程序员可能会忽略这一点,但了解多线程和多进程对于编写更好的 Python 代码非常重要。这是一个关键概念,如果正确使用,可以提升性能。了解何时以及如何使用每个可以帮助您创建更快、更高效的应用程序。

来源:自由坦荡的湖泊AI一点号

相关推荐