您的位置:首页 > 编程语言 > Python开发

Python多线程基础

2018-03-03 12:50 253 查看

1.线程概念

线程的定义:

线程是进程中的一个实体,作为系统调度和分派的基本单元。Linux下的线程看作轻量级进程。

线程的性质:

1.线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。

2.由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即线程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。

3.进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用它们自己的。

4.线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。

5.由于共享资源(包括数据和文件),所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。

多线程使用的情形: 前台和后台工作情况;异步处理工作情况;需要加快执行速度情况,组织复杂工作的情况;同时有多个用户服务请求的情况等。

2.线程死锁

临界资源:每次只允许一个线程进行访问的资源

死锁: 线程间相互等待临界资源而造成彼此无法继续执行

发生死锁的条件:

互斥条件:一个资源每次只能被一个进程使用(临界资源)

请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放

不可剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺

循环等待条件:多个进程因互相等待资源而停止继续执行

死锁的避免:

等待某个资源时,使用超时机制

采用消息通信的通信机制,而不是共享内存的通信机制

3.Python3多线程

多线程运行有如下优点:

使用线程可以把占据长时间的程序中的任务放到后台去处理。

用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

程序的运行速度可能加快

在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

线程可以分为:

内核线程:由操作系统内核创建和撤销

用户线程:不需要内核支持而在用户程序中实现的线程

Python3线程中常用的两个模块为:_thread threading(推荐使用

threading模块除了包含_thread模块中的所有方法外,还提供的其他方法:

threading.currentThread():返回当前的线程变量

threading.enumerate():返回一个包含正在运行的线程的list.正在运行指线程启动后、结束前,不包括启动前和终止后的线程。

threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果.除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了一下方法:

run():用以表示线程活动的方法

start():启动线程活动

join([time]):等待至线程终止。这阻塞调用线程直至线程的join()方法被调用终止-正常退出或者抛出未处理的异常-或者是可选的超时发生。

isAlive():返回线程是否活动的。

getName():返回线程名

setName():设置线程名

线程同步:如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquire和release方法之间.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 线程