进程概念
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
(摘自百度百科)
1、创建进程
Python中有一个multiprocessing库,提供了一个Process类来代表一个进程对象。
示例:
frommultiprocessingimportProcess
importtime
importos
num =3
#定义一个子进程要执行的方法
deftest():
globalnum
print("子进程启动,进程ID:%s"%(os.getpid()))
whilenum !=:
print("当前Num = %d"%num)
num -=1
time.sleep(1)
print("子进程结束")
if__name__ =="__main__":
print("主进程启动,进程ID:%s"%(os.getpid()))
#创建子进程
p = Process(target=test)#进程执行的任务
#启动进程
p.start()
# 主进程会等子进程结束再运行
p.join()
print("当前Num = %d"%num)
print("主进程结束")
输出:
从以上代码执行结果可以看出
1.1 在子进程中修改全局变量对主进程中的全局变量没有影响,也就是说全局变量在各进程中互不影响,包括多个子进程。
1.2 p.join():主进程启动后,一直等到子进程全部执行完成,才运行、结束。
另外:如果test()方法有参数,创建子进程时,p = Process(target=test, args=(参数,)) 可以传入参数。
2、进程池
可以使用Pool方法来创建了一个进程池,通过pool.apply_async( )将子进程添加到进程池中,pool.close( )表示关闭进程池,一定要添加join()函数。
示例:
frommultiprocessingimportPool
importos, time, random
deftest(num):
print("子进程%d启动,进程ID:%s"% (num, os.getpid()))
time.sleep(random.choice([1,2,3]))
print("子进程%d结束,进程ID:%s"% (num, os.getpid()))
if__name__ =="__main__":
print("主进程启动,进程ID:%s"% (os.getpid()))
#创建进程池
p = Pool(3)#表示进程池中有3个进程一起执行
foriinrange(8):
#创建进程,添加到进程池
p.apply_async(test,args=(i,))
#关闭进程池
p.close()
#等进程池中所有的子进程运行结束,再去执行父进程
p.join()
print("父进程结束")
输出:
领取专属 10元无门槛券
私享最新 技术干货