这篇教程深入理解python多线程编程写得很实用,希望能帮到您。 进程进程的概念: 进程是资源分配的最小单位,他是操作系统进行资源分配和调度运行的基本单位。通俗理解:一个正在运行的一个程序就是一个进程。例如:正在运行的qq、wechat等,它们都是一个进程。 进程的创建步骤 1.导入进程包 import multiprocessing 2.通过进程类创建进程对象 进程对象 = multiprocessing.Process() 3.启动进程执行任务 进程对象.start() import multiprocessingimport timedef 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 multiprocessingimport timedef 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 osimport multiprocessingdef 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: breakif __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 osimport threadingdef 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: breakif __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多线程编程内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net! Python实现文本文件拆分写入到多个文本文件的方法 Python控制台输出俄罗斯方块移动和旋转功能 |