Python多執行緒執行帶多個引數的函式

2021-09-07 11:06:16 字數 1179 閱讀 8522

在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). 將多個輸入變數打包到乙個引數

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。

參考:

C 帶參多執行緒操作

多執行緒操作 參考鏈結 新建 thread 物件會新建託管執行緒。thread 類包含需要使用 threadstart 委託或 parameterizedthreadstart 委託的建構函式 委託包裝在呼叫 start 方法時由新執行緒呼叫的方法。多次呼叫 start 會導致 threadstat...

python多執行緒完成多個任務

執行緒 執行緒可以理解成執行 的分支,執行緒是執行對應的 的,cpu排程執行緒去執行對應 importtime importthreading 跳舞的任務 defdance 獲取當前執行 的執行緒 current thread threading.current thread print dance...

多執行緒傳參

1.要避免的陷阱 1 用detach 時,如果主線程先結束,變數就會被 所以用detach 的話,不推薦用引用,同時絕對不能用指標。include include using namespace std void myprint const int i,char pmybuf intmain 2 在...