第一章 1.20 多线程基础

一个应用程序在运行时就是一个进程,一个进程默认只有一个主线程,也可以有多个线程,同时执行不同的任务;本次课程主要是实现如何让进程可以进行多线程工作

一个进程就像一个工厂,多个进程就像工厂例的工人,每个工人之间的工作相互之间不影响

让一个进程多线程工作有两种实现方式:
①.直接导入treading模块种的Tread类并创建子线程对象
②.导入treading模块种的Tread类,创建一个Tread的子类,并用这个子类创建子线程对象

一. 在进程种创建Tread类的对象

1. 创建线程对象 - 子线程

线程对象 = Thread(target=函数, args=元组)
说明:
target - 函数,需要在子线程中执行的任务(会在子线程中调用)
args - target对应的函数在调用的时候传的参数

2. 让子线程执行子线程中的任务

线程对象.start()
在子线程中调用target对用的函数,并且将args中的元素作为参数

比如在一个进程中模拟下载电影:

from treading import Tread
from datetime import datetime
import time

def download(self, movie_name)
	print('%s开始下载了,开始时间是%s' % (movie_name, datetime.time()))
	time.sleep(5)
	print('%s下载完成了,完成时间是%s' % (movie_name, datetime.time()))
	
# 创建线程对象 - 子线程
t1 = Tread(target=download, args=('暮光之城'))
t2 = Tread(target=download, args=('两只老虎'))
t3 = Tread(target=download, args=('卧虎藏龙'))

# 让子线程执行子线程中的任务
t1.start()
t2.start()
t3.start()

二. 在进程种创建Tread类的子类的对象

还是下载电影的例子:

from treading import Tread
from datetime import datetime
import time

class DownloadTread(Tread): # 创建Tread的子类
	def __init__(self, mvoie_name) # 创建子类的对象属性
	super().__init__() # 继承父类的属性
	self.movie_name = movie_name
	
	# run方法是在子线程中自动调用的,除了self之外不能有其他的参数
	def run(self) -> None:
		print('%s开始下载,开始时间是:%s' % (self.movie_name, datetime.now()))
		time.sleep(5)
		print('%s下载结束,结束时间是:%s' % (self.movie_name, datetime.now()))
		

t1 = DownloadTead('暮光之城')
t2 = DownloadTead('两只老虎')
t3 = DownloadTead('卧虎藏龙')

t1.start
t3.start
t2.start

join的用法
线程对象.join()
其他代码

这儿的其他代码会在线程对象中的任务执行完后才执行

posted @ 2019-11-30 17:26  anjhon_木  阅读(206)  评论(0编辑  收藏  举报