深入理解python多线程编程
进程的概念进程是资源分配的最小单位他是操作系统进行资源分配和调度运行的基本单位。通俗理解一个正在运行的一个程序就是一个进程。例如正在运行的qq、wechat等它们都是一个进程。进程的创建步骤1.导入进程包import multiprocessing2.通过进程类创建进程对象进程对象 multiprocessing.Process()3.启动进程执行任务进程对象.start()1234567891011121314151617181920importmultiprocessingimporttimedefsing():foriinrange(3):print(唱歌。。。)time.sleep(0.5)defdance():foriinrange(3):print(跳舞。。。)time.sleep(0.5)if__name____main__:time1time.time()s1multiprocessing.Process(targetsing)d1multiprocessing.Process(targetdance)s1.start()d1.start()s1.join()#这个方法可以等待子进程结束后再继续往下运行通常用于进程间的同步d1.join()print(time.time()-time1)带有参数的进程args元组kwargs字典123456789101112131415161718importmultiprocessingimporttimedefsing(name, num):foriinrange(num):print(%s在唱歌。。。%name)time.sleep(0.5)defdance(num):foriinrange(num):print(跳舞。。。)time.sleep(0.5)if__name____main__:# 以元组形式传参s1multiprocessing.Process(targetsing, args(小明,3))# 以字典形式传参d1multiprocessing.Process(targetdance, kwargs{num:5, })s1.start()d1.start()进程的注意点主进程会等待所有的子进程执行结束在结束设置守护主进程12主进程结束后不会再继续执行子进程中剩余的工作work_processmultiprocessing.Process(targetwork, daemonTrue)线程线程的介绍实现多任务的另一种形式线程是程序执行的最小单位同属一个进程的多个线程共享进程所拥有的全部资源线程的创建步骤导入线程包import threading通过线程类创建进程对象线程对象 threading.Thread()启动线程执行任务线程对象.start()优缺点对比1.进程优缺点优点可以用多核可以并行缺点资源开销大2.线程优缺点优点资源开销小缺点不可用多核依附于进程一个进程一个核案例-多进程实现视频文件夹多任务拷贝器需求分析目标文件夹是否存在如果不存在就创建存在则不创建遍历源文件夹中所有文件并拷贝到目标文件夹采用进程实现多任务并完成拷贝实现步骤定义源文件夹所在的路径目标文件夹所在路径创建目标文件夹通过os.listdir获取源目录中的文件列表遍历每个文件定义一个函数专门实现文件拷贝采用进程实现多任务完成高并发拷贝12345678910111213141516171819202122232425262728293031323334importosimportmultiprocessingdefcopy_file(file_name, source_dir, dest_dir):# 1 拼接源文件路径和目标文件路径source_pathsource_dir\\file_namedest_pathdest_dir\\file_name# 2 打开源文件和目标文件withopen(source_path,rb) as source_file:withopen(dest_path,wb) as dest_file:# 3 循环读取源文件到目标路径whileTrue:datasource_file.read(1024)ifdata:dest_file.write(data)else:breakif__name____main__:# 1 定义源文件夹和目标文件夹source_dirrE:\TCT\TIFF_tran\pos_1dest_dirrF:\目标文件夹# 2.创建目标文件夹try:os.mkdir(dest_dir)except:print(目标文件夹已经存在)# 3.读取源文件夹的文件列表file_listos.listdir(source_dir)# 4.遍历文件列表实现拷贝forfile_nameinfile_list:# copy_file(file_name, source_dir, dest_dir)# 5.使用多进程实现多任务拷贝sub_processmultiprocessing.Process(targetcopy_file, args(file_name, source_dir, dest_dir))sub_process.start()1234567891011121314151617181920212223242526272829303132333435363738#线程importosimportthreadingdefcopy_file(file_name, source_dir, dest_dir):# 1 拼接源文件路径和目标文件路径source_pathsource_dir\\file_namedest_pathdest_dir\\file_name# 2 打开源文件和目标文件withopen(source_path,rb) as source_file:withopen(dest_path,wb) as dest_file:# 3 循环读取源文件到目标路径whileTrue:datasource_file.read(1024)ifdata:dest_file.write(data)else:breakif__name____main__:# 1 定义源文件夹和目标文件夹source_dirrF:\迅雷下载\视频-智能机器人从0到1系统入门课程\视频dest_dirrF:\目标文件夹# 2.创建目标文件夹try:os.mkdir(dest_dir)except:print(目标文件夹已经存在)# 3.读取源文件夹的文件列表file_listos.listdir(source_dir)# 4.遍历文件列表实现拷贝forfile_nameinfile_list:# copy_file(file_name, source_dir, dest_dir)# 5.使用多线程实现多任务拷贝sub_threadthreading.Thread(targetcopy_file, args(file_name, source_dir, dest_dir))sub_thread.start()forfile_nameinfile_list:sub_thread.join()sub_thread.join()#主线程等待所有线程结束才会结束到此这篇关于python多线程编程的文章就介绍到这了