多任务编程 注:Windows下存在问题,需要在Linux系统下测试
线程
概念
- 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执 行,因为切换任务的速度相当快,看上去一起执行而已)
- 并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的
线程的使用
- 导入模块:import threading
- 补充:import time time.sleep(N) 暂停N秒
- 启动: 线程对象.start( )
线程参数说明:Thread([group [, target [, name [, args [, kwargs]]]]])
- group: 线程组,目前只能使用None
- target: 执行的目标任务名
- args: 以元组的方式给执行任务传参
- kwargs: 以字典方式给执行任务传参
- name: 线程名,一般不用设置
查看当前执行的线程:threading.current_thread( )
获取活动线程列表:threading.enumerate()线程的注意
- 线程之间是无序的
- 主程序会等所有子线程结束后才结束
- 如果需要可以设置守护主线程
- 线程间共享全局变量
守护主线程
方式1:线程定义时,传参daemon=True 守护主线程
方式2:线程 . setDaemon(True)
(设置成为守护主线程,主线程退出后子线程直接销毁不再执行子线程的代码
自定义线程类)线程代码示例
import threading # 自定义线程类 class MyThread(threading.Thread): # 通过构造方法取接收任务的参数 def __init__(self, info1, info2): # 调用父类的构造方法 super(MyThread, self).__init__() self.info1 = info1 self.info2 = info2 # 定义自定义线程相关的任务 def test1(self): print(self.info1) def test2(self): print(self.info2) # 通过run方法执行相关任务 def run(self): self.test1() self.test2() # 创建自定义线程 my_thread = MyThread("测试1", "测试2") # 启动 my_thread