• 第一章 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()
    其他代码

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

  • 相关阅读:
    linux socket里的send和recv,阻塞与非阻塞socket、TCP与UDP在这方面的区别
    leetcode 149 Max Points on a Line
    leetcode 126 Word Ladder II
    leetcode 123 Best Time to Buy and Sell Stock III
    LC 297 Serialize and Deserialize Binary Tree
    栈和队列问题
    链表问题
    day17--权限管理和配置服务
    谷粒学院功能简介及系统架构
    day01--MybatisPlus的使用
  • 原文地址:https://www.cnblogs.com/anjhon/p/11963304.html
Copyright © 2020-2023  润新知