簡體   English   中英

Python:使用地圖和多處理

[英]Python: using map and multiprocessing

我正在嘗試編寫一個可以接受兩個參數的函數,然后將其添加到multiprocessing.Pool並並行化它。 當我嘗試編寫這個簡單的函數時,我遇到了一些復雜問題。

df = pd.DataFrame()
df['ind'] = [111, 222, 333, 444, 555, 666, 777, 888]
df['ind1'] = [111, 444, 222, 555, 777, 333, 666, 777]

def mult(elem1, elem2):
    return elem1 * elem2

if __name__ == '__main__':
    pool = Pool(processes=4) 
    print(pool.map(mult, df.ind.astype(int).values.tolist(), df.ind1.astype(int).values.tolist()))
    pool.terminate()

它返回一個錯誤:

TypeError: unsupported operand type(s) for //: 'int' and 'list'

我無法理解什么是錯的。 任何人都可以解釋這個錯誤的含義以及我如何解決它?

多進程池模塊接收您要多處理的參數列表,並且僅支持接受一個參數。 您可以通過執行以下操作來解決此問題:

from multiprocessing import Pool
import pandas as pd

df = pd.DataFrame()
df['ind'] = [111, 222, 333, 444, 555, 666, 777, 888]
df['ind1'] = [111, 444, 222, 555, 777, 333, 666, 777]

def mult(elements):
    elem1,elem2 = elements
    return elem1 * elem2

if __name__ == '__main__':
    pool = Pool(processes=4)
    inputs = zip(df.ind.astype(int).values.tolist(), df.ind1.astype(int).values.tolist())
    print(pool.map(mult, inputs))
    pool.terminate()

我在這里做的是將你的兩個iterables壓縮成一個列表,每個元素是你想要輸入的兩個參數。 現在,我更改函數的輸入以解壓縮這些參數,以便可以處理它們。

暫無
暫無

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

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