高级编程之 进程

1. 进程

1-1. 进程与程序

进程: 正在执行的程序
程序: 没有执行的代码,是一个静态的

1-2. 进程的状态

进程的状态

1-3. 使用进程实现多任务

multiprocessing模块就是跨平台的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解
为是一个独立的进程,可以执行另外的事情

1-4. 线程与进程之间的对比

进程: 能够完成多任务,一台电脑上可以同时运行多QQ
线程: 能够完成多任务,一个QQ中的多个聊天窗口
区别: 进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

1-5. 进程间通信 -Queue

特点:

  • 先进先出

1-6. 多进程共享全局变量

案例:

在这里插入代码片

2. 进程池:

定义: 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程,但是如果是上百甚至上千个目标,手动的去创建的进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法

初始化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--")

2-2. 案例,多任务文件夹复制

流程:

  1. 获取用户要copy的文件夹的名次
  2. 创建一个新的文件夹
  3. 获取文件夹的所有的待copy的文件名字
  4. 创建进程池
  5. 向进程池中添加拷贝任务
发布了27 篇原创文章 · 获赞 11 · 访问量 1482

猜你喜欢

转载自blog.csdn.net/weixin_45550881/article/details/104020981
今日推荐