Python进程和进程池

进程概念

进程(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("父进程结束")

输出:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181030G1UZOV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券