• 线程池指令系统


    线程池指令系统

    线程等待(阻塞)

    试一试

    from threading import Thread
    from time import sleep
    from datetime import datetime
    from random import randint
    
    
    def download(name):
        print(f'{name}开始下载:{datetime.now()}')
        sleep(randint(2, 7))
        print(f'{name}下载结束:{datetime.now()}')
    
    
    if __name__ == '__main__':
        t1 = Thread(target=download, args=('明日战纪',))
        t2 = Thread(target=download, args=('斗罗大陆',))
        t3 = Thread(target=download, args=('独行月球',))
    
        # 示例1: 三个电影都下载结束后打印"全部下载完成"
        # t1.start()
        # t2.start()
        # t3.start()
        #
        # # 1. 子线程对象.join()   -   阻塞当前线程直到指定子线程任务完成
        # t1.join()
        # t2.join()
        # t3.join()
        # print('==============全部下载完成!============')
    
        # 示例2:前两个电影都下载完成后才下载第三个电影
        t1.start()
        t2.start()
    
        t1.join()
        t2.join()
    
        t3.start()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    多线程池

    线程池 - 管理多个线程的工具

    线程池工作原理:先创建指定个数的线程,然后添加多个任务(任务数量>线程数量),让线程池中的线程去执行添加的所有任务,直到所有任务都执行完(线程池中的每个线程可能会执行多个任务)。

    from threading import Thread, current_thread
    from time import sleep
    from datetime import datetime
    from random import randint
    from concurrent.futures import ThreadPoolExecutor
    
    
    def download(name):
        print(f'{name}开始下载:{datetime.now()}', current_thread())
        sleep(randint(2, 7))
        print(f'{name}下载结束:{datetime.now()}')
    
    
    if __name__ == '__main__':
        # 方案1:直接使用多线程下载1000个电影
        num = 0
        for _ in range(10):
            ts = []
            for x in range(100):
                num += 1
                t = Thread(target=download, args=(f'电影{num}',))
                ts.append(t)
                t.start()
            for x in ts:
                x.join()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    方案2:使用线程池下载1000个电影

    1. 创建线程池 - ThreadPoolExecutor(线程数最大值)
        pool = ThreadPoolExecutor(3)
    
    • 1
    1. 添加任务
    1. 一次添加一个任务: submit(函数, 实参1, 实参2, 实参3,…)
      注意:实参的数量由前面的函数在调用的时候需要的实参来决定
    pool.submit(download, '肖生克的救赎')
    pool.submit(download, '霸王别姬')
    
    • 1
    • 2

    2)同时添加多个任务: map(函数, 参数对应的序列)
    注意:使用map添加多个任务的时候,任务对应的函数必须是有且只有一个参数的函数

    pool.map(download, ['V字仇杀队', '恐怖游轮', '沉默的羔羊'])
    
    • 1
    1. 关闭线程池
      线程池关闭后无法再添加新的任务,并且会阻塞当前线程等待整个线程池的任务都完成
    pool.shutdown()
    
    • 1

    常见的指令操作

    执行指令的工具: Windows - 命令提示符(cmd) 、Mac - 终端

    1. 运行python程序: - 运算程序的计算机必须先安装python环境
      win: python py文件路径
      mac: python3 py文件路径
    2. 进入文件夹: cd
      cd 文件夹相对路径、文件夹绝对路径
      注意:如果是windows操作系统,cd操作如果要跨盘需要先切盘,然后再cd
      切盘方法:C:、E:、D:
    3. 查看当前文件夹的内容
      win: dir
      Mac:ls
    4. 用指令创建虚拟环境
      第一步:找到一个用来放虚拟环境的文件夹
      第二步:通过cd指令进入到存放虚拟环境的文件夹中
      第三步:创建虚拟环境
      python -m venv 虚拟环境名
      python3 -m venv 虚拟环境名
      第四步:激活虚拟环境
      (mac) source 虚拟环境目录/bin/activate
      (windows) 虚拟环境目录\ Scripts\activate.bat
      第五步:退出虚拟环境
      deactivate
      5.常用pip指令(pip - Python包管理工具)
      pip list - 查看当前环境已经安装过的所有的第三方库
      pip install 第三方库名称 - 下载并且安装指定的第三方库
      pip install 第三方库名称 -i 镜像地址 - 在指定的镜像地址中下载安装
      pip install 第三方库名称==版本号 (也可以在后面继续加 -i 镜像地址)
      pip install 第三方库名称1 第三方库名称2…
      pip freeze > 依赖文件名 - 生成依赖文件
      pip install -r 依赖文件路径 - 批量安装
      pip uninstall 第三方库名称 - 卸载指定的第三方库
  • 相关阅读:
    sync.map 源码学习
    vue中父子组件之间的访问方式-$children-$refs-$parent
    推荐一个拥有386万订阅者,10000多免费学习视频的频道
    【LeetCode】70. 爬楼梯
    1019 数字黑洞
    k8s查看pod日志的几种方法
    数据结构:平衡二叉树
    7. Go的map
    Luffy项目:2、项目需求(2),项目库的创建,软件开发目录,Django配置文件介绍
    DecorView和android.R.id.content的关系
  • 原文地址:https://blog.csdn.net/shasha_bucou_sha/article/details/126439495