python並行化介紹及使用 Pool

2021-07-04 20:04:04 字數 1895 閱讀 3603

本篇將要介紹python的並行化,及簡單的應用。

主要介紹map函式的使用,一手包辦了序列操作、引數傳遞和結果儲存等一系列的操作。

首先是引入庫:

from multiprocessing.dummy import pool

pool=pool(4)

results=pool.map(爬取函式,**列表)

本文將乙個簡單的例子來看一下如何使用map函式以及這種方法與普通方法的對比情況。

import time

from multiprocessing.dummy import pool

defgetsource

(url):

html=requests.get(url)

urls=

for i in range(1,21):

newpage=''+str(i)

timex=time.time() #測試一

for i in urls:

getsource(i)

print (time.time()-timex)

#這裡是輸出的結果:

#10.2820000648

time1=time.time() #測試二

pool=pool(4)

results=pool.map(getsource,urls)

pool.close()

pool.join()

print (time.time()-time1)

#這裡是輸出結果:

#3.23600006104

對比以上兩種方法,可以很明顯地看出 測試二比測試一要快很多。

測試二中:

pool=pool(4) #宣告了4個執行緒數量,這裡的個數根據你電腦的cpu個數來定。

results=pool.map(getsource,urls) #這裡使用map函式,並且函式的引數為自定義函式名稱,以及函式中的引數(這裡為乙個列表)

pool.close() #關閉pool物件

pool.join() #join函式的主要作用是等待所有的執行緒(4個)都執行結束後

print (time.time()-time1) #輸出所用時間差

列舉pool的其他應用函式:

from multiprocessing import pool

deff

(x):

#定義乙個自定義函式f

return x*x

if __name__ == '__main__':

pool = pool(processes=4) # start 4 worker processes

print result.get(timeout=1) #限定反應時間為1 通過get函式取得result的結果

print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"

it = pool.imap(f, range(10)) #使用imap函式執行自定義函式

print it.next() # prints "0" 使用next函式乙個乙個地取得it的執行結果

print it.next() # prints "1"

print it.next(timeout=1) # prints "4" unless your computer is *very* slow

import time

print result.get(timeout=1) # raises timeouterror

使用Openmp並行化

執行命令 g fopenmp xx.cpp lgomp lpthread o xx.out 用例一 include include include void test int n printf d,n int main int argc,char ar 用例二 include include inc...

python並行程式設計 介紹篇

介紹篇 執行緒篇程序篇 非同步篇gpu篇 分布式篇 任務分解 將程式分解為任務,在不同處理器上執行以實現並行化。可以使用以下兩種方法 任務分配 將任務分配到各個處理器上 目的是負載均衡 聚集 將小任務與大任務合併到一起從而改進效能的過程 如果任務數量遠遠超過可用的處理器數量,由於執行緒切換等其它因素...

Oracle合併行的使用介紹

當我們需要處理訂單的時候可能會有這樣的奇怪的需求 把訂單明細裡的商品種類顯示出來,例如乙個訂單包括圖書,花生油,自行車,當我們存放的時候是分別存放到訂單明細中的,當我們取得時候需要一起提取。這就涉及到乙個合併列的概念。一 訂單表和訂單詳情表分開 總分結構 oracle 10g提供的方法是 selec...