Python 3 多线程
Python 3 多线程
线程
-
创建、撤消与切换进程,存在较大的时空开销,所以引入线程
-
一个程序至少一个进程,一个进程至少一个线程
-
Python中使用线程有两种方式:函数或者用类来包装线程对象。
-
进程是资源分配的最小单位,线程是程序的最小执行单位
-
多线程类似于同时执行多个不同程序,多线程运行有如下优点:
-
程序进程速度可能加快;
-
可以大量创建线程
-
线程与线程之间是独立的,并发执行。有好处,在收发数据时;坏处,在赋值时,容易发生错位赋值。
-
线程主要针对于具有大量输入、输出以及网络收发数据等限制程序的速度时
python 3 主要有2个库, threading(推荐),threading(兼容 python 2 )
-
_thread
Python中使用线程有两种方式:函数或者用类来包装线程对象。
#函数调用
_thread.start_new_thread ( function, args[, kwargs] )
- function - 线程函数
- args 传递给线程函数的参数,他必须是个 tuple 类型。(i,)
- kwargs - 可选参数,字典类型
threading
我们可以通过直接从 threading.Thread 继承创建一个新的子类,并实例化后调用 start() 方法启动新线程,即它调用了线程的 run() 方法:
class myThread (threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
pass
threading 其他方法
- threading.currentThread() : 返回当前线程变量
- threading.enumerate() : 返回正在运行的线程 list
- threading.activeCount() : 返回正在运行的线程数 len(threading.enumerate())
threading,thread 的实例化类方法
- run() : 线程活动方法 调用 start() 后默认启动
- start() : 启动线程
- join([time]) : 等待至对应线程中止,阻塞调用
- isAlive(): 线程是否活动
- getName(): 返回线程名
- setName(): 设置线程名
线程同步
如果多个线程共同对某个数据修改,则可能出现不可预料的结果,
引入锁,在修改数据时,是线程同步—— threading.Lock()
它降低的线程的速度。
threadLock = threading.Lock() #锁对象实例化
threadLock.acquire() #获得锁
#修改数据 排版输出
threadingLock.release #释放锁
一般搭配队列配合使用,线程从队列中取值,进行运算;
Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。