国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python 多進程并發(fā)操作中進程池Pool的實例

2020-02-16 10:33:38
字體:
供稿:網(wǎng)友

在利用Python進行系統(tǒng)管理的時候,特別是同時操作多個文件目錄,或者遠程控制多臺主機,并行操作可以節(jié)約大量的時間。當被操作對象數(shù)目不大時,可以直接利用multiprocessing中的Process動態(tài)成生多個進程,10幾個還好,但如果是上百個,上千個目標,手動的去限制進程數(shù)量卻又太過繁瑣,這時候進程池Pool發(fā)揮作用的時候就到了。

Pool可以提供指定數(shù)量的進程,供用戶調(diào)用,當有新的請求提交到pool中時,如果池還沒有滿,那么就會創(chuàng)建一個新的進程用來執(zhí)行該請求;但如果池中的進程數(shù)已經(jīng)達到規(guī)定最大值,那么該請求就會等待,直到池中有進程結(jié)束,才會創(chuàng)建新的進程來它。這里有一個簡單的例子:

#!/usr/bin/env python#coding=utf-8"""Author: SquallLast modified: 2011-10-18 16:50Filename: pool.pyDescription: a simple sample for pool class"""from multiprocessing import Poolfrom time import sleepdef f(x):  for i in range(10):    print '%s --- %s ' % (i, x)    sleep(1)def main():  pool = Pool(processes=3)  # set the processes max number 3  for i in range(11,20):    result = pool.apply_async(f, (i,))  pool.close()  pool.join()  if result.successful():    print 'successful'if __name__ == "__main__":  main()

先創(chuàng)建容量為3的進程池,然后將f(i)依次傳遞給它,運行腳本后利用ps aux | grep pool.py查看進程情況,會發(fā)現(xiàn)最多只會有三個進程執(zhí)行。pool.apply_async()用來向進程池提交目標請求,pool.join()是用來等待進程池中的worker進程執(zhí)行完畢,防止主進程在worker進程結(jié)束前結(jié)束。但必pool.join()必須使用在pool.close()或者pool.terminate()之后。其中close()跟terminate()的區(qū)別在于close()會等待池中的worker進程執(zhí)行結(jié)束再關(guān)閉pool,而terminate()則是直接關(guān)閉。result.successful()表示整個調(diào)用執(zhí)行的狀態(tài),如果還有worker沒有執(zhí)行完,則會拋出AssertionError異常。

利用multiprocessing下的Pool可以很方便的同時自動處理幾百或者上千個并行操作,腳本的復(fù)雜性也大大降低。

——————————————————————————————————

Python多進程并發(fā)(multiprocessing)

由于Python設(shè)計的限制(我說的是咱們常用的CPython)。最多只能用滿1個CPU核心。

Python提供了非常好用的多進程包multiprocessing,你只需要定義一個函數(shù),Python會替你完成其他所有事情。借助這個包,可以輕松完成從單進程到并發(fā)執(zhí)行的轉(zhuǎn)換。

1、新建單一進程

如果我們新建少量進程,可以如下:

import multiprocessingimport timedef func(msg):for i in xrange(3):print msgtime.sleep(1)if __name__ == "__main__":p = multiprocessing.Process(target=func, args=("hello", ))</ p.start()p.join()print "Sub-process done."            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 翼城县| 镇坪县| 禹城市| 萍乡市| 荃湾区| 东阿县| 石林| 横峰县| 永昌县| 木兰县| 安乡县| 奉贤区| 澜沧| 名山县| 宜都市| 新巴尔虎左旗| 华蓥市| 上栗县| 丹巴县| 北安市| 蕉岭县| 六盘水市| 长垣县| 教育| 盘山县| 团风县| 弋阳县| 双辽市| 平乐县| 日土县| 会宁县| 融水| 商洛市| 宁津县| 伊宁县| 仪征市| 都匀市| 永寿县| 乌兰县| 玛纳斯县| 保定市|