1. 线程的理解
1.1. 重要的概念:
程序: /bin/firefox是一个二进制程序, (eg:python, Java程序), 是一个真实存在的, 可以看到的实体;
进程: 执行程序的过程中产生的一系列内容,(计算机给进程分配了内存, cpu等.....)
线程: 执行进程的最小单元,一个进程里必然有一个主线程
操作线程的模块:thread、threading
1.2 专业的总结:
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。是被系统独立调度和分派的基本单位。
2. 创建线程
2.1 导入第三方模块:
import threading
2.2 建立一个程序并运行:
def job():
print("这是一个需要执行的任务......")
if __name__ == '__main__':
job()
2.3 查看当前线程个数:
threading.active_count()
2.4 查看当前线程信息:
threading.current_thread()
3. 线程的生命周期
![线程的生命周期图](https://i-blog.csdnimg.cn/blog_migrate/059ef3027d469f3575bd3569d20c2444.png)
4. 实现多线程的方法一
4.1 新建线程:
_thread.start_new_thread(job, ()) //job为要执行的进程;后面可以对进程传入参数
_thread.start_new_thread(job, ())
5. 实现多线程的方法二
5.1 新建线程:
t1 = threading.Thread(target=job ) //创建多线程时, 需要指i定该线程执行的任务
t2 = threading.Thread(target=job)
5.2 启动进程:
t1.start() //主线程执行结束, 但是子线程还在运行
t2.start()
5.3 等待所有的子线程执行结束之后, 再执行主线程:
t1.join()
t2.join()
6. 实现多线程的方法三
6.1 建立MyThread类:
class MyThread(threading.Thread): //继承threading.Thread类
def __init__(self, jobName): //重写__init__方法
super(MyThread, self).__init__()
self.jobName = jobName
6.2 重写run方法, 实现多线程:
因为start方法执行时, 调用的是run方法;
run方法里面编写的内容就是要执行的任务;
def run(self):
print("这是一个需要执行的任务%s......" %(self.jobName))
print("当前线程的个数:", threading.active_count() )
time.sleep(1)
print("当前线程的信息:", threading.current_thread())