Fork me on GitHub

学习python -- 第019天 多线程

线程

进程是分配资源的最小单位,一旦创建一个进程就会分配一定的资源,就像跟两个人聊QQ就需要打开两个QQ软件一样是比较浪费资源的.
线程是程序执行的最小单位,实际上进程只负责分配资源,而利用这些资源执行程序的是线程,也就说进程是线程的容器,一个进程中最少有一个线程来负责执行程序.同时线程自己不拥有系统资源,只需要一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.这就像通过一个QQ软件(一个进程)打开两个窗口(两个线程)跟两个人聊天一样,实现多任务的同时也节省了资源.

 

多线程的作用

 

 

◆多线程是Python程序中实现多任务的一种方式.
◆线程是程序执行的最小单位.
◆同属一个进程的多个线程共享进程所拥有的全部资源

线程创建

 

与上一章的多进程大同小异

 

1.导入线程模块
import threading
2.通过线程类创建线程对象
线程对象=threading.Thread(target=任务名)
3.启动线程执行任务
线程对象.start()

1 #创建子线程
2 sing_thread=threading.Thread(target=sing)
3 #创建子线程
4 dance_thread=threading.Thread(target=dance)
5 #启动线程
6 sing_thread.start()
7 dance_thread.start()

 

带参数的线程也算差不多

 

主线程和子线程的结束顺序

◆主线程会等待所有的子线程执行结束再结束,除非设置子线程守护主线程
◆设置守护主线程有两种方式:
1.threading.Thread(target=work,daemon=True)
2.线程对象.setDaemon(True)

注意第二个要在线程开启前设置

 

线程间的执行顺序

◆线程之间执行是无序的,是由CPU调度决定某个线程先执行的。

 1 #
 2 # @author:浊浪
 3 # @version:0.1
 4 # @time: 2021/8/1 22:19
 5 #
 6 import threading
 7 import time
 8 
 9 
10 def task():
11     time.sleep(1)
12     #current thread:获取当前线程的线程对象
13     thread=threading.current_thread()
14     print(thread)
15 if __name__ =='__main__':
16     for i in range(5):
17         sub_thread=threading.Thread(target=task)
18         sub_thread.start()
19 
20 #结论:多线程之间执行是无序。由cpu调度。
21 '''
22 输出
23 <Thread(Thread-5, started 14428)><Thread(Thread-3, started 42576)>
24 <Thread(Thread-2, started 36360)>
25 <Thread(Thread-1, started 67972)>
26 <Thread(Thread-4, started 36532)>
27 '''

 

进程和线程的对比

关系对比

1.线程是依附在进程里面的,没有进程就没有线程。

2.一个进程默认提供一条线程,进程可以创建多个线程。

 

区别对比

1.创建进程的资源开销要比创建线程的资源开销要大

2.进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位

3.线程不能够独立执行,必须依存在进程中

 

优缺点对比

1.进程优缺点:
优点:可以用多核
缺点:资源开销大


2.线程优缺点:
优点:资源开销小
缺点:不能使用多核

posted @ 2021-08-01 22:26  走位,走位  阅读(25)  评论(0编辑  收藏  举报