• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    深入理解python多线程编程

    进程

    进程的概念:
    进程是资源分配的最小单位,他是操作系统进行资源分配和调度运行的基本单位。通俗理解:一个正在运行的一个程序就是一个进程。例如:正在运行的qq、wechat等,它们都是一个进程。
    进程的创建步骤
    1.导入进程包
     import multiprocessing
    2.通过进程类创建进程对象
     进程对象 = multiprocessing.Process()
    3.启动进程执行任务
     进程对象.start()

    import multiprocessing
    import time
    
    def sing():
        for i in range(3):
            print("唱歌。。。")
            time.sleep(0.5)
    def dance():
        for i in range(3):
            print("跳舞。。。")
            time.sleep(0.5)
    if __name__ == '__main__':
        time1 = time.time()
        s1 = multiprocessing.Process(target=sing)
        d1 = multiprocessing.Process(target=dance)
        s1.start()
        d1.start()
        s1.join() #这个方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步
        d1.join()
        print(time.time()-time1)

    带有参数的进程

    args元组,kwargs字典

    import multiprocessing
    import time
    
    def sing(name, num):
        for i in range(num):
            print("%s在唱歌。。。"%name)
            time.sleep(0.5)
    def dance(num):
        for i in range(num):
            print("跳舞。。。")
            time.sleep(0.5)
    if __name__ == '__main__':
        # 以元组形式传参
        s1 = multiprocessing.Process(target=sing, args=('小明', 3))
        # 以字典形式传参
        d1 = multiprocessing.Process(target=dance, kwargs={"num": 5, })
        s1.start()
        d1.start()

    进程的注意点

    主进程会等待所有的子进程执行结束在结束

    设置守护主进程

    主进程结束后不会再继续执行子进程中剩余的工作
    work_process = multiprocessing.Process(target=work, daemon=True)

    线程

    线程的介绍

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

    线程的创建步骤
    导入线程包
     import threading
    通过线程类创建进程对象
     线程对象 = threading.Thread()
    启动线程执行任务
     线程对象.start()

    优缺点对比

    1.进程优缺点:
     优点:可以用多核,可以并行
     缺点:资源开销大
    2.线程优缺点:
     优点:资源开销小
     缺点:不可用多核,依附于进程一个进程一个核

    案例-多进程实现视频文件夹多任务拷贝器

    需求分析:
    目标文件夹是否存在,如果不存在就创建,存在则不创建
    遍历源文件夹中所有文件,并拷贝到目标文件夹
    采用进程实现多任务,并完成拷贝
    实现步骤
    定义源文件夹所在的路径,目标文件夹所在路径
    创建目标文件夹
    通过os.listdir获取源目录中的文件列表
    遍历每个文件,定义一个函数,专门实现文件拷贝
    采用进程实现多任务,完成高并发拷贝

    import os
    import multiprocessing
    def copy_file(file_name, source_dir, dest_dir):
        # 1 拼接源文件路径和目标文件路径
        source_path = source_dir + '\\' + file_name
        dest_path = dest_dir + '\\' + file_name
        # 2 打开源文件和目标文件
        with open(source_path, 'rb') as source_file:
            with open(dest_path, 'wb') as dest_file:
                # 3 循环读取源文件到目标路径
                while True:
                    data = source_file.read(1024)
                    if data:
                        dest_file.write(data)
                    else:
                        break
    if __name__ == '__main__':
        # 1 定义源文件夹和目标文件夹
        source_dir = r'E:\TCT\TIFF_tran\pos_1'
        dest_dir= r'F:\目标文件夹'
    
        # 2.创建目标文件夹
        try:
            os.mkdir(dest_dir)
        except:
            print("目标文件夹已经存在")
        # 3.读取源文件夹的文件列表
        file_list = os.listdir(source_dir)
        # 4.遍历文件列表实现拷贝
        for file_name in file_list:
            # copy_file(file_name, source_dir, dest_dir)
            # 5.使用多进程实现多任务拷贝
            sub_process = multiprocessing.Process(target=copy_file, args=(file_name, source_dir, dest_dir))
            sub_process.start()
    #线程
    import os
    import threading
    def copy_file(file_name, source_dir, dest_dir):
        # 1 拼接源文件路径和目标文件路径
        source_path = source_dir + '\\' + file_name
        dest_path = dest_dir + '\\' + file_name
        # 2 打开源文件和目标文件
        with open(source_path, 'rb') as source_file:
            with open(dest_path, 'wb') as dest_file:
                # 3 循环读取源文件到目标路径
                while True:
                    data = source_file.read(1024)
                    if data:
                        dest_file.write(data)
                    else:
                        break
    if __name__ == '__main__':
        # 1 定义源文件夹和目标文件夹
        source_dir = r'F:\迅雷下载\视频-智能机器人从0到1系统入门课程\视频'
        dest_dir= r'F:\目标文件夹'
    
        # 2.创建目标文件夹
        try:
            os.mkdir(dest_dir)
        except:
            print("目标文件夹已经存在")
        # 3.读取源文件夹的文件列表
        file_list = os.listdir(source_dir)
        # 4.遍历文件列表实现拷贝
        for file_name in file_list:
            # copy_file(file_name, source_dir, dest_dir)
            # 5.使用多线程实现多任务拷贝
            sub_thread = threading.Thread(target=copy_file, args=(file_name, source_dir, dest_dir))
            sub_thread.start()
       for file_name in file_list:
           sub_thread.join()
            sub_thread.join()#主线程等待所有线程结束才会结束

    到此这篇关于python多线程编程的文章就介绍到这了,更多相关python多线程编程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 分析Python感知线程状态的解决方案之Event与信号量
    • 像线程一样管理进程的Python multiprocessing库
    • Python爬虫之线程池的使用
    • Python多线程编程之threading模块详解
    • Python一些线程的玩法总结
    上一篇:Python实现文本文件拆分写入到多个文本文件的方法
    下一篇:Python控制台输出俄罗斯方块移动和旋转功能
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    深入理解python多线程编程 深入,理解,python,多,线程,