一、进程和线程
正在的运行的应用程序就是进程,进程和进程之间均运算在其专门的内存空间里面,相互独立不干扰
线程是进程执行任务的基本单元,一个进程默认有一个线程,这个线程叫主线程。
如果进程中需要主线程以外的线程(子线程),需要手动创建
二、threading模块
-
函数
threading是Python标准库中提供的专门处理多线程问题的模块。
threading.current_thread() - 获取当前线程
threading.active_count() - 获取当前进程的活跃线程个数
threading.enumerate() - 获取当前进程中所有的线程对象
-
类
Thread类 - Thread类的对象就是线程对象(程序需要多少个子线程,就需要创建多少个Thread类的对象)
三、添加线程 - 创建Thread对象
添加线程就是创建Thread的对象
-
创建线程
Thread(target=函数,args=元组) - 创建线程对象
target - 函数,需要在子线程执行的任务对应的函数
args - 元组,元组中的元素就是在子线程中调用target对应的函数传递的参数 -
启动线程
线程对象.start() - 在子线程中调用target对应的函数
四、Thread类的子类对象
线程对象可以是Thread类的对象,也可以是Thread类的子类对象
注意:在run方法中实现需要在子线程中执行的任务。实现任务对应的功能需要额外的数据,不能传参,通过添加对象属性来提供数据
run不能直接通过对象主动调用,否则任务都会在主线程中执行
五、join
线程对象.join() - join后面的操作会在指定线程结束之后才执行
六、queue
注意:在子线程中调用的函数没有返回值(有返回值也没有办法获取)
Queue提供的是线程安全的序列,专门用来保存不同线程中产生的数据,同时提供线程相关操作