python 进程与线程 精要
2024-10-07 18:29:30
程序与进程
程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。
程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。
进程是资源分配的最小单位,线程是CPU调度的最小单位,每一个进程中至少有一个线程。
线程
线程是进程中执行运算的最小单位,是进程中的一个实体,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位。
1、在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位
2、同一进程中的各个线程,都可以共享该进程所拥有的资源
3、一个进程中的多个线程之间,可以并发执行
当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下(其实就是setDaemon(False)),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,
Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。
_thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。
threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法:
- threading.currentThread(): 返回当前的线程变量。
- threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
- threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
- run(): 用以表示线程活动的方法。
- start():启动线程活动。
- join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
- isAlive(): 返回线程是否活动的。
- getName(): 返回线程名。
- setName(): 设置线程名。
- setDaemon():设置为后台线程或前台线程(默认)如果是后台线程,主线程执行过程中,后台线程也在执行,主线程执行完毕后,后台线程不论成功与否,均停止;如果是前台线程,主线程执行过程中,前台线程也在执行,主线程执行完毕后,等待前台线程也执行完成后,程序停止。
#!/usr/bin/env python
#coding:utf8 import threading #线程模块
import time def sayhi(num): #定义每个线程要运行的函数
print('running on number',num)
time.sleep(3) if __name__ == "__main__":
t1 = threading.Thread(target=sayhi,args=(33,)) #生成一个线程实例
t2 = threading.Thread(target=sayhi,args=(22,)) #生成另一个线程实例 t1.start() #启动线程
t2.start()
print(t1.getName()) #获取线程名
print(t2.getName())
t1.join() #阻塞主线程,等待t1子线程执行完后再执行后面的代码
t2.join() #阻塞主线程,等待t2子线程执行完后再执行后面的代码
print('-----end')
最新文章
- [转]MySQL Explain详解
- springMVC配置freemarker 二(问题讨论篇)
- CAP Confusion: Problems with ‘partition tolerance’
- ERP员工入职登记(五)
- 206. Reverse Linked List
- 使用UIGestureRecognizer监听屏幕事件
- SQL Server DATEADD() 函数
- CSS—换行
- Android Material Design NavigationView 及 Palette 颜色提取器
- laravel4通过控制视图模板路劲来动态切换主题
- Android缓存技术
- c++ vector(向量)使用方法详解(顺序访问vector的多种方式)
- puppet配置问题统计
- spring的Profile使用对比和应用场景分析
- MySQL 8 配置文件
- python的UnboundLocalError: local variable 'xxx' referenced b
- java多线程系列5 atomic简介
- Linux查看机器和硬盘的SN
- uva-11129-分治
- Entity Framework 与 LINQ to SQL