网站建设与制作教程,传奇网站一般怎么做的,喀什网站制作,网站关键词排名欢迎大家订阅【Python从入门到精通】专栏#xff0c;一起探索Python的无限可能#xff01; 文章目录 前言一、并行执行二、threading模块 前言
现代操作系统如 macOS、UNIX、Linux 和 Windows 等#xff0c;均支持多任务处理。本篇文章详细讲解了并行执行的概念以及如何在 … 欢迎大家订阅【Python从入门到精通】专栏一起探索Python的无限可能 文章目录 前言一、并行执行二、threading模块 前言
现代操作系统如 macOS、UNIX、Linux 和 Windows 等均支持多任务处理。本篇文章详细讲解了并行执行的概念以及如何在 Python 中利用 threading 模块实现多线程编程。 本篇文章参考黑马程序员
一、并行执行
①进程 进程是计算机程序的一次执行实例是操作系统对正在运行的程序所分配的资源的集合。每个进程都有自己的内存空间、系统资源和执行状态。在操作系统中进程是资源调度和管理的基本单位。一个进程可以包含多个线程。
②线程 线程是进程中的一个执行单元是操作系统进行 CPU 调度的最小单位。一个进程可以由多个线程组成它们共享进程的资源如内存和文件描述符。在同一进程中的线程之间可以直接通信。
通俗来讲进程就好比一家公司是操作系统对程序进行运行管理的单位线程就好比公司的员工是进程实际的工作者并且一个进程公司可以有多个线程员工。
③并行执行 并行执行是指在同一时间内进行不同的工作。 多个进程可以在操作系统中同时运行即使在单核处理器上进程之间也会通过时间片轮转等机制实现并行效果。 而在一个进程内部多线程的执行更是可以帮助我们实现真正的并行操作比如一个Python程序可以做到一个线程在输出“你好”另一个线程在输出“Hello”像这样一个程序在同一时间做两件乃至多件不同的事情 我们就称之为多线程并行执行。
操作系统中可以运行多个进程即多任务运行。 一个进程内可以运行多个线程即多线程运行。
【注意】
进程之间是内存隔离的 即不同的进程拥有各自的内存空间。 这就类似于不同的公司拥有不同的办公场所。线程之间是内存共享的线程是属于进程的一个进程内的多个线程之间是共享这个进程所拥有的内存空间的。 这就类似于公司员工之间是共享公司的办公场所。 二、threading模块
大多数现代编程语言都支持多线程编程Python 也不例外。Python 提供了 threading 模块来实现多线程操作其基本的使用方法如下 ①导入threading模块
import threading ②定义线程要执行的函数
def thread_function(): # 线程执行的任务 pass③创建线程对象 thread_obj threading.Thread([group [, target [, name [, args [, kwargs]]]]]
group暂时无用未来功能的预留参数target执行的目标任务名name线程名一般不用设置args以元组的方式给执行任务传参kwargs以字典方式给执行任务传参
④启动线程 thread_obj.start()
【示例】
import time
def sing():while True:print(在唱歌)# 等待 1 秒time.sleep(1)def dance():while True:print(在唱歌)# 等待 1 秒time.sleep(1)if __name__ __main__:sing()dance()运行后会一直输出“在唱歌” 输出结果 在唱歌 在唱歌 在唱歌 …… 【分析】 在这段代码中sing() 在主线程中运行由于while True:永远为真sing() 会无限循环程序会一直在这个循环中执行。因此dance() 函数永远不会被调用运行后会一直输出“在唱歌”。
import time
import threadingdef sing():while True:print(在唱歌)time.sleep(1)def dance():while True:print(在跳舞)time.sleep(1)if __name__ __main__:# 创建一个新的线程其目标函数为 singsing_threadthreading.Thread(targetsing)# 创建另一个线程其目标函数为 dancedance_threadthreading.Thread(targetdance)# 启动线程sing_thread.start()dance_thread.start()输出结果 在唱歌 在跳舞 在唱歌 在跳舞 …… 【分析】 在这段代码中sing 和 dance 函数分别代表两个独立的线程。它们在同一时间内向控制台输出信息实现了并行执行。
若需给线程传递参数可以使用 args 和 kwargs形参
args以元组的方式给执行任务传参kwargs以字典方式给执行任务传参
【示例】
import time
import threadingdef sing(msg):while True:print(msg)time.sleep(1)def dance(msg):while True:print(msg)time.sleep(1)if __name__ __main__:# 创建一个唱歌的线程# 传入元组元组是用逗号区分的,当只有一个元素时需要在其后面加逗号sing_threadthreading.Thread(targetsing,args(在唱歌,))# 创建一个跳舞的线程dance_threadthreading.Thread(targetdance,kwargs{msg:在跳舞})# 启动线程sing_thread.start()dance_thread.start()输出结果 在唱歌 在跳舞 在唱歌 在跳舞 …… 在这个例子中sing 函数和 dance 函数各自接受消息参数实现了更灵活的输出功能。