多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** ## Python多任务-进程 ### 进程和程序 进程:正在执行的程序 程序:没有执行的代码,是一个静态的 ### 进程的状态 ![](https://img.kancloud.cn/9d/8c/9d8cf84d557c60bb1ac6e92cd8635725_764x309.png) ### 使用进程实现多任务 multiprocessing模块就是跨平台的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。 ### 线程和进程之间的对比 进程:能够完成多任务,一台电脑上可以同时运行多个QQ 线程:能够完成多任务,一个QQ中的多个聊天窗口 根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位 ![](https://img.kancloud.cn/87/9d/879ddd858903b96071f52f7b02970cda_1395x535.jpg) ### 进程间通信-Queue Queue-队列 先进先出 ### 队列间简单通信 模拟下载数据,与数据处理 ### 多进程共享全局变量 共享全局变量不适用于多进程编程 ### 进程池 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程,但是如果是上百甚至上千个目标,手动的去创建的进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法 <br> 初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求,但是如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务 ~~~ from multiprocessing import Pool import os,time,random def worker(msg): t_start = time.time() print('%s开始执行,进程号为%d'%(msg,os.getpid())) time.sleep(random.random()*2) t_stop = time.time() print(msg,"执行完成,耗时%0.2f"%(t_stop-t_start)) def demo(): pass if __name__ == '__main__': po = Pool(3) # 定义一个进程池 for i in range(0,10): po.apply_async(worker,(i,)) print("--start--") po.close() po.join() print("--end--") ~~~ ### 进程池间的进程通信 ### 多任务文件夹复制 1 获取用户要copy的文件夹的名次 2 创建一个新的文件夹 3 获取文件夹的所有的待copy的文件名字 4 创建进程池 5 向进程池中添加拷贝任务