python-多线程

一、线程相关知识

  • 进程
  • 线程
  • 主线程

1.进程

-在window操作系统中,一个进程就是一个exe或者dll程序,他们相互独立,相互也可以通信。

2.线程

  • 在一个进程中可以包含多个线程,多个线程共享一块内存空间和一组系统资源。
  • 系统在各个线程之间切换时,开销要比进程小得多,正因如此,线程被称为轻量级进程。

3.主线程

  • Python 程序至少有一个线程,这就是主线程,程序在启动后由 Python 解释器负责创建主线程,在程序结束后由 Python 解释器负责停止主线程。
    在这里插入图片描述

二、线程模块——threading

  • active_count ():返回当前处于活动状态的线程个数。.
  • current_thread ():返回当前的 Thread 对象。
  • main_thread ():返回主线程对象。主线程是 Python 解释器启动的线程。

代码如下: 在这里插入图片描述

三、创建子线程

  • 线程对象:线程对象是 threading 模块的线程类 Thread 或 Thread 子类所创建的对象。
  • 线程体:线程体是子线程要执行的代码,这些代码会被封装到
    个函数中。子线程在启动后会执行线程体。
  • 实现线程体主要有以下两种方式:

1) 自定义函数实现线程体。
2) 自定义线程类实现线程体。

3.1自定义函数实现线程体
Thread(target=None, name=None, args=())

通过target来指定一个自定义函数
name来给线程命名(不调用系统则会自动分配)
args 给自定义函数提供参数

代码如下:
在这里插入图片描述
在这里插入图片描述

多线程:其他线程要想运行必须要当前线程休眠或者挂起

3.2自定义线程类实现线程体

创建一个Thread子类并重写run()方法
(run() 方法就是线程体函数)

代码如下:
在这里插入图片描述
在这里插入图片描述

四、线程管理

线程管理包括:
线程创建、线程启动、线程休眠、等待线程结束和线程停止。

4.1等待线程结束

有时,一个线程(假设是主线程)需要等待另外一个线程结束(假设是t1子线程)结束才能运行。
在这里插入图片描述

若主线程需要调用 t1子线程修改的返回数据时 才有必要阻塞等待t1结束(若不调用则不怎么需要等待t1子线程结束)

代码如下:
在这里插入图片描述
在这里插入图片描述

4.2线程停止

  • 在线程体结束时,线程就停止了。
  • 业务比较复杂时,线程体中执行一个"死循环"。
  • 线程体是否持续执行"死循环"是通过判断停止变量实现的,"死循环"结束则线程体结束,线程也就结束了。

在这里插入图片描述

import threading
import time

#线程停止变量
isrunning = Ture  #创建一个线程停止变量isrunning,控制线程结束

#工作线程体函数
def workthread_body():#工作体执行一些任务
	while isrunning():#工作线程死循环
		#线程工作开始
		print('线程工作进行中')
		#线程休眠
		time.sleep(10) #休眠10s
	print('工作线程结束...')
#控制线程体函数
def controlthread_body():
	global isrunning
	while isrunning:#控制线程体死循环
		#从键盘输入停止命令exit
		commend = 'exit':
			isrunning = False
			print('控制线程结束')

#主线程
#创建工作线程对象workthread
workthread = threading.Thread(target=workthread_body)
#工作线程来执行一些任务
#启动线程workthread
workthread.start()

#创建控制线程对象controlthread
controlthread = threading.Thread(target=controlthread_body)
#控制线程控制修改线程停止变量

#启动线程controlthread
controlthread.start()

global isrunning

由于需要在线程体中修改变量isrunning,因此需要将isrunning变量声明为global
(简单来说就是将其提升为全局变量,从只读变为可写)

def controlthread_body():

控制线程体从控制台读取指令, 根据指令修改线程停止变量

controlthread = threading.Thread(target=controlthread_body)

控制线程控制修改线程停止变量

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值