在知道和使用多进程和多线程之前
需要知道,进程是什么线程是什么?
进程:是计算机中正在运行的程序的实例。它是操作系统调度和管理的基本单位,包含程序代码、数据和执行状态等信息。*每个进程都有自己的内存空间和资源,可以与其他进程进行通信。
线程(Thread)是程序执行流的最小单元,是程序执行过程中的一个子任务,一个进程可以包含多个线程。线程拥有自己的程序计数器、栈、局部变量和状态,但是它们共享同一进程的全局变量、文件和系统资源。
一、多进程是指在一个操作系统中同时运行多个独立的进程。每个进程都有自己的地址空间、代码、数据和栈等资源,并且独立地运行在CPU上。多进程可以提高系统的吞吐量和响应时间,因为不同的进程可以同时运行,互不影响。
多进程的使用场景(这个是重点):计算密集型,即cpu密集型;用到很多计算数据的操作,可以使用多进程;譬如要计算数据库中很多数据的加减乘除的值。
1、简单的例子
multiprocessing模块:提供了一个Process类,可以方便地创建和管理子进程。
import multiprocessingdef worker(num):"""子进程要执行的任务"""print('Worker %s is running...' % num)if __name__ == '__main__':# 创建两个子进程p1 = multiprocessing.Process(target=worker, args=(1,))p2 = multiprocessing.Process(target=worker, args=(2,))# 启动子进程p1.start()p2.start()# 等待子进程执行完成p1.join()p2.join()print('All workers finished.')# 输出结果:# Worker 1 is running...# Worker 2 is running...# All workers finished.
2、实际使用的例子
import multiprocessing# 用于计算的函数
def test(a, b):print(a * b)return a * b# 主函数
def main():processes = []for i in range(10):p = multiprocessing.Process(target=test, args=(i, i+1))# 启动子进程p.start()# 将循环的子进程放入列表,用于后面的等待退出processes.append(p)for i in processes:i.join()
if __name__ == '__main__':main()
二、多线程是指在一个进程内同时执行多个线程的技术。一个进程由一个或多个线程组成,每个线程拥有独立的执行流程,可以同时执行不同的任务,提高处理器的利用率和系统的响应能力。多线程常用于并行处理、异步编程、提高程序运行效率等方面。
多线程的使用场景(这个是重点):I/O密集型,即input和output的缩写;例如磁盘,内存的读写,都是多线程可以使用的地方。
1、简单的例子
threading模块:提供了一个Thread类,可以方便地创建和管理子线程。
import threadingdef fibonacci(n):if n <= 1:return nelse:return (fibonacci(n-1) + fibonacci(n-2))if __name__ == '__main__':threads = []for i in range(10):t = threading.Thread(target=fibonacci, args=(35,))threads.append(t)for t in threads:t.start()for t in threads:t.join()
2、实际使用的例子
import threadingdef test(a):# 譬如去服务器读取文件是否存在,检查该名称是否符合规范;注:这个文件会很多,至少是上万的print(f'一个假的线程任务{a}')return adef add_process():threads = []for i in range(10):p = threading.Thread(target=test, args=(i,))# 启动子进程p.start()# 将循环的子进程放入列表,用于后面的等待退出threads.append(p)for i in threads:i.join()
if __name__ == '__main__':add_process()
后续有线程池和进程池,欢迎大家参考。