python进程池和线程池,python3进程池

  python进程池和线程池,python3进程池

  

  进程池Pool

  当要创建的子流程数量较少时,可以直接使用多重处理中的流程来动态生成多个流程。但是如果有几百个甚至几千个目标,手工创建进程的工作量是巨大的,可以使用多处理模块提供的池方法。

  初始化池时,您可以指定进程的数量。当一个新的请求提交到池中时,如果池未满,将创建一个新的进程来执行该请求。但是,如果池中的进程数达到了指定的值,请求将一直等待,直到池中的一个进程完成,并且将创建一个新的进程来执行。

  frommultiprocessingimportPool

  进口货

  进口时间

  随机输入

  defworker(消息):

  t_start=time.time()

  Print(%d进程开始执行%d%(os.getpid(),msg))

  #random.random()随机生成0到1之间的浮点数。

  time.sleep(random.random()*2)

  t_stop=time.time()

  Print(msg,已完成执行,耗时%0.2f%(t_stop-t_start))

  if__name__==__main__:

  Po=Pool(3)#用3个进程定义一个进程池。

  foriinrange(0,10):

  #Pool.apply_async(要调用的目标,(传递给目标的参数祖先,))

  #每个周期都会用自由子进程调用目标。

  po.apply_async(worker,(I,))

  打印(-开始-)

  Po.close()#关闭进程池,之后Po将不会接收新的请求。

  Po.join()#等待Po中的所有子流程执行完毕,必须放在close语句之后。

  Print (-end-)运行如下:

  -开始-

  353进程开始执行0

  454进程开始执行1

  455进程开始执行2

  2.执行后需要0.20。

  355进程开始执行3

  1,执行后,花了1.19。

  454该过程开始执行4

  4.执行完之后,花了0.37。

  454进程开始执行5

  0,执行完毕,拿了1.57。

  453进程开始执行6

  5.执行完之后,花了0.19。

  454进程开始执行7

  3.行刑后,耗时1.63小时。

  455进程开始执行8

  6.执行后,花了0.49。

  453进程开始执行9

  8,执行后,花了0.75。

  7.执行完了,花了0.90。

  9,执行后,取了0.63。

  -END相关推荐:《Python视频教程》

  multiprocessing.Pool常用函数解析:

  Apply_async(func[,args[,kwds]]):以非阻塞方式调用func(并行执行,阻塞方式必须等待上一个进程退出后才能执行下一个进程),args是传递给func的参数列表,kwds是传递给func的关键字参数列表;

  Apply(func[,args[,kwds]]):通过阻塞调用func。

  Close():关闭池,使其不接受新任务;

  Terminate():无论任务是否完成都立即终止;

  Join():主进程被阻塞,等待子进程退出,必须在close或terminate后使用;

  p>apply堵塞式

  

frommultiprocessingimportPool

  importos

  importtime

  importrandom

  defworker(msg):

  t_start=time.time()

  print("%d进程开始执行%d"%(os.getpid(),msg))

  #random.random()随机生成0~1之间的浮点数

  time.sleep(random.random()*2)

  t_stop=time.time()

  print(msg,"执行完毕,耗时%0.2f"%(t_stop-t_start))

  if__name__=='__main__':

  po=Pool(3)#定义一个进程池,进程数3

  foriinrange(0,10):

  #Pool.apply_async(要调用的目标,(传递给目标的参数元祖,))

  #每次循环将会用空闲出来的子进程去调用目标

  po.apply(worker,(i,))

  print("----start----")

  po.close()#关闭进程池,关闭后po不再接收新的请求

  po.join()#等待po中所有子进程执行完成,必须放在close语句之后

  print("-----end-----")

运行结果为:

  

4400进程开始执行0

  0,执行完毕,耗时1.89

  4401进程开始执行1

  1,执行完毕,耗时1.91

  4402进程开始执行2

  2,执行完毕,耗时1.64

  4400进程开始执行3

  3,执行完毕,耗时1.16

  4401进程开始执行4

  4,执行完毕,耗时1.85

  4402进程开始执行5

  5,执行完毕,耗时0.29

  4400进程开始执行6

  6,执行完毕,耗时0.19

  4401进程开始执行7

  7,执行完毕,耗时1.19

  4402进程开始执行8

  8,执行完毕,耗时0.61

  4400进程开始执行9

  9,执行完毕,耗时1.08

  ----start----

  -----end-----

说明:通过运行结果可以看出来,阻塞式会等进程池中的进程都执行完毕了才会运行主进程的start和end的打印

  相关推荐:

  

Python中的进程是什么

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: