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

首頁 > 編程 > Python > 正文

Python標準庫之多進程(multiprocessing包)介紹

2020-02-23 06:13:54
字體:
來源:轉載
供稿:網友

在初步了解Python多進程之后,我們可以繼續探索multiprocessing包中更加高級的工具。這些工具可以讓我們更加便利地實現多進程。

進程池

進程池 (Process Pool)可以創建多個進程。這些進程就像是隨時待命的士兵,準備執行任務(程序)。一個進程池中可以容納多個待命的士兵。

“三個進程的進程池”

比如下面的程序:

代碼如下:
import multiprocessing as mul
def f(x):
    return x**2
pool = mul.Pool(5)
rel  = pool.map(f,[1,2,3,4,5,6,7,8,9,10])
print(rel)

我們創建了一個容許5個進程的進程池 (Process Pool) 。Pool運行的每個進程都執行f()函數。我們利用map()方法,將f()函數作用到表的每個元素上。這與built-in的map()函數類似,只是這里用5個進程并行處理。如果進程運行結束后,還有需要處理的元素,那么的進程會被用于重新運行f()函數。除了map()方法外,Pool還有下面的常用方法。

apply_async(func,args)  從進程池中取出一個進程執行func,args為func的參數。它將返回一個AsyncResult的對象,你可以對該對象調用get()方法以獲得結果。

close()  進程池不再創建新的進程

join()   wait進程池中的全部進程。必須對Pool先調用close()方法才能join。

練習

有下面一個文件download.txt。

代碼如下:
www.sina.com.cn
www.163.com
www.iciba.com
www.cnblogs.com
www.qq.com
www.douban.com

使用包含3個進程的進程池下載文件中網站的首頁。(你可以使用subprocess調用wget或者curl等下載工具執行具體的下載任務)

共享資源

我們在Python多進程初步已經提到,我們應該盡量避免多進程共享資源。多進程共享資源必然會帶來進程間相互競爭。而這種競爭又會造成race condition,我們的結果有可能被競爭的不確定性所影響。但如果需要,我們依然可以通過共享內存和Manager對象這么做。

共享“資源”

共享內存

在Linux進程間通信中,我們已經講述了共享內存(shared memory)的原理,這里給出用Python實現的例子:

代碼如下:
# modified from official documentation
import multiprocessing
def f(n, a):
    n.value   = 3.14
    a[0]      = 5
num   = multiprocessing.Value('d', 0.0)
arr   = multiprocessing.Array('i', range(10))
p = multiprocessing.Process(target=f, args=(num, arr))
p.start()
p.join()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清苑县| 神农架林区| 吴桥县| 海兴县| 潮安县| 兴安盟| 互助| 乐都县| 封开县| 彰化县| 托克逊县| 余庆县| 安多县| 北京市| 三亚市| 孝感市| 延寿县| 太和县| 湾仔区| 石棉县| 南宫市| 镇远县| 闻喜县| 乐清市| 武定县| 灵山县| 黄冈市| 墨竹工卡县| 威远县| 内丘县| 高唐县| 高青县| 武宣县| 大石桥市| 汾西县| 莱西市| 阿城市| 宁阳县| 探索| 原平市| 英德市|