Python:使用地图和多处理

Pet*_*rov 5 python 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()
Run Code Online (Sandbox Code Playgroud)

它返回一个错误:

TypeError: unsupported operand type(s) for //: 'int' and 'list'
Run Code Online (Sandbox Code Playgroud)

我无法理解什么是错的.任何人都可以解释这个错误的含义以及我如何解决它?

tmw*_*n26 6

多进程池模块接收您要多处理的参数列表,并且仅支持接受一个参数.您可以通过执行以下操作来解决此问题:

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()
Run Code Online (Sandbox Code Playgroud)

我在这里做的是将你的两个iterables压缩成一个列表,每个元素是你想要输入的两个参数.现在,我更改函数的输入以解压缩这些参数,以便可以处理它们.