簡體   English   中英

使用多個參數的python多重處理

[英]python multiprocessing using multiple arguments

我可以使用多重處理來輕松地設置對“ func”的並行調用,如下所示:

import multiprocessing

def func(tup):
    (a, b) = tup
    return str(a+b)

pool = multiprocessing.Pool()
tups = [ (1,2), (3,4), (5,6), (7,8)]
results = pool.imap(func, tups)
print ", ".join(results)

給出結果:

3, 7, 11, 15

問題是我的實際函數“ func”比此處的示例更復雜,因此我不想使用單個“ tup”參數來調用它。 我想要多個參數 以及關鍵字參數 我想做的事情如下所示,但是列表中的“ *”解壓縮不起作用 (並且也不支持關鍵字)

import multiprocessing

def func(a, b):
    return str(a+b)

pool = multiprocessing.Pool()
tups = [ *(1,2), *(3,4), *(5,6), *(7,8)]
results = pool.imap(func, tups)
print ", ".join(results)

那么...有沒有辦法在進行並行處理時獲得python函數調用的全部功能?

您不能只使用字典或對象嗎?

import multiprocessing
def func(a):
     print(str(a['left'] + a['right']))

pool = multiprocessing.Pool()
i1 = {'left': 2, 'right': 5}
i2 = {'left': 3, 'right': 4}
pool.imap(func, [i1, i2])

這樣,您就不會在方法定義中定義關鍵字,但是至少可以在方法主體內引用關鍵字。 功能輸入也一樣。 與處理元組相比,它更具可讀性。

HarryPotfleur的評論是正確的,基本上,如果您使用的是Python 3.3+,則可以使用starmap

星圖 (func,iterable [,chunksize])
map()相似,除了可迭代的元素應該是作為參數解壓縮的可迭代對象。

因此[(1,2), (3, 4)]的可迭代結果導致[func(1,2), func(3,4)]

只需將imap替換為starmap

如果您使用的是較低版本,則沒有直接的方法。 相反,您可以使用中間函數

def inter(tup):
    return func(*tup)

def func(a, b, c):
    return str(a+b+c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM