如何在数据框上使用多重处理

时间:2019-02-19 14:47:25

标签: python multiprocessing threadpool starmap

首先,感谢任何回应。这样在我的编程项目中节省了很多时间。我很感激!

我的代码遍历巨大的数据框。这是示例代码:

#len(df)=1,000,000
for i in range(1,len(df))
    df.iloc[i,1]=df.iloc[i,1]*40

注意*:我的代码正在做复杂得多的事情。问题是相同的,但我害怕张贴代码行和代码行。本质上,我想以该示例为例来了解如何对数据框的各个部分进行多处理。

我想使用multiprocessing拆分进程。我希望一个工作人员执行1-500,000任务,下一个工作人员执行500,001-1,000,000。 这是我的想法:

from multiprocessing import Pool

def jobs(jobstart,jobend):
#len(df)=1,000,000
    for i in range(jobstart,jobend):
        df.iloc[i,1]=df.iloc[i,1]*40


if __name__ == '__main__':
    p= multiprocessing.Pool(processes=2)
    results=p.starmap(jobs, [(1,500000),(500001,1000000)])
    p.close()

print(results)

这怎么不起作用? 错误:

  File "C:/Files for Local/fisher_scrapper/frappy.py.py", line 238, in <module>
    results=p.starmap(jobs, [(0,50),(51,100)])

  File "C:\Users\TLCLA\AppData\Local\Continuum\anaconda3\lib\multiprocessing\pool.py", line 298, in starmap
    return self._map_async(func, iterable, starmapstar, chunksize).get()

  File "C:\Users\TLCLA\AppData\Local\Continuum\anaconda3\lib\multiprocessing\pool.py", line 683, in get
    raise self._value

JSONDecodeError: Expecting value

0 个答案:

没有答案