Python中线程的使用

并发:多个任务同一时间段进行python

并行:多个任务同一时刻进行安全

 

线程的实现多线程

线程模块并发

Python经过两个标准库_thread 和threading,提供对线程的支持 , threading对_thread进行了封装函数

所以在实际的使用中咱们通常都是使用threading测试

threading模块中提供了Thread , Lock , RLock , Condition等组件ui

 

Thread类spa

        经常使用参数线程

target   表示调用对象,即子线程要执行的任务3d

name     子线程的名称

args     传入target函数中的位置参数,是一个元组,参数后必须加逗号

        经常使用实例方法

Thread.run (self)                   线程启动时运行的方法,由该方法调用target参数所指定的函数

Thread.start (self)                 启动进程,start方法就是去帮你调用run方法

Thread.terminate (self)              强制终止线程

Thread.join (self, timeout=None)       阻塞调用,主线程进行等待

Thread.setDaemon (self,daemonic)  将子线程设置为守护线程

Thread.getName(self,name)           获取线程名称

Thread.setName (self,name )         设置线程名称

 

建立线程

实例Thread类

继承Thread类

 

Join & setDaemon

主线程 : 当一个程序启动时 , 就有一个线程开始运行 , 该线程一般叫作程序的主线程

子线程 : 由于程序是开始时就执行的 , 若是你须要再建立线程 , 那么建立的线程就是这个主线程的子线程

主线程的重要性体如今两方面 : 

1. 是产生其余子线程的线程 

2. 一般它必须最后完成执行好比执行各类关闭操做

join : 阻塞调用程序 , 直到调用join () 方法的线程执行结束, 才会继续往下执行

setDaemon() 与 join() 基本上是相对的 , join会等子线程执行完毕 ; 而setDaemon则不会等,主线程结束,则所有结束

 

 

 

线程通讯

在多线程中 , 全部变量对于全部线程都是共享的 

所以 , 线程之间共享数据最大的危险在于多个线程同时修改一个变量 , 那就乱套了

因此咱们须要互斥锁 , 来锁住数据

 

线程间全局变量的共享

由于线程属于同一个进程,所以它们之间共享内存区域,因此全局变量是公共的

 

共享内存间存在竞争问题

在这里进行原子操做(取值、运算、赋值)的时候切换到了其它线程,一个线程还没赋值,另外的线程就已经给它赋值了,而后又切回来继续赋值

 

使用锁来控制共享资源的访问

加锁:Lock对象.acquire()

解锁:Lock对象.release()

 

队列的基本概念

一个入口,一个出口,先入先出(FIFO)

 

线程安全队列、操做一览

入队: put(item)

出队: get()

测试空: empty()

测试满: full()

队列长度: qsize()

任务结束: task_done()

等待完成: join()

 

 

 

线程池

池的概念

主线程:至关于生产者,只管向线程池提交任务,并不关心线程池是如何执行任务的,所以,也不关心是哪个线程执行的这个任务

线程池:至关于消费者,负责接收任务,并将任务分配到一个空闲的线程中去执行

 

线程池的简单实现

python内置线程池

 

池的其余操做

操做一: close - 关闭提交通道,不容许再提交任务

操做二: terminate - 停止进程池,停止全部任务 

相关文章
相关标签/搜索