Python基礎教程:多線程運行帶多個參數的函數


在python中經常會到用多線程處理某個函數來縮短運行時間。

from multiprocessing import Pool

def work(x):
    return x+1
pool = Pool(processes=4) # 4個線程
x = [1,2,3,4,5,6]
results = pool.map(work, x)
print results

運行上面的程序就會多線程處理並打印出輸入x的計算結果。

但是這個函數僅允許函數的輸入變量為1,如果函數需要多個參數輸入,那個就無法用上面的程序。比如:

def work(x, y):
    return x + y

遇到這種情況我們有一下幾種處理方法:

1).用partial函數提取主要的一個參數固定其他參數

比如,我們想用x去加一個固定值,那么我們就認為x是主要參數,固定y:

from functools import partial

partial_work = partial(work, y=1) # 提取x作為partial函數的輸入變量
results = pool.map(partial_work, x)

2). 將多個輸入變量打包到一個參數

#Python學習交流群:531509025
x = [1,2,3,4,5,6]
y = [1,1,1,1,1,1]
x_y = zip(x, y)
results = pool.map(work, x_y)

3). 使用pathos包下的multiprocessing

這個包是使用dill的multiprocessing的一個fork,允許多參數輸入:

from pathos.multiprocessing import ProcessingPoll as Pool

pool = Pool(4)
results = pool.map(work, x, y)

總結:
當函數的參數在不同時候的輸入均不同,那么前一種就不太合適。而在后面兩種中,用pathos會更簡單些,不太容易報pickling error。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM