【问题标题】:Python Multiprocessing Pool.mapPython 多处理池.map
【发布时间】:2017-04-18 10:28:51
【问题描述】:

我尝试在 python 中使用多处理读取文件。这是一个小例子:

import multiprocessing
from time import *

class class1():
    def function(self, datasheetname):
        #here i start reading my datasheet

if __name__ == '__main__':
    #Test with multiprosessing
    pool = multiprocessing.Pool(processes=4)
    pool.map(class1("Datasheetname"))
    pool.close()

现在我收到以下错误:

TypeError: map() 缺少 1 个必需的位置参数:'iterable'

在该板的另一个线程中,我得到了使用 ThreadPool 执行此操作的提示,但我不知道如何执行此操作。有什么想法吗?

【问题讨论】:

  • 您需要并行执行此操作,还是需要读取一堆 CSV/Excel 工作表?如果是后者,可以考虑使用pandas.read_csvpandas.read_excel,它可以通过一次调用读取多个文件/工作表。

标签: python multiprocessing pool


【解决方案1】:

Pool.map:

ma​​p(func, iterable[, chunksize])

map() 内置函数的并行等效项(尽管它仅支持一个可迭代参数)。它会一直阻塞,直到结果准备好。

此方法将可迭代对象分割成多个块,将它们作为单独的任务提交给进程池。这些块的(近似)大小可以通过将 chunksize 设置为正整数来指定。

您需要传递一个可迭代对象,其中每个元素都作为每个进程中的参数传递给目标func

例子:

def function(sheet):
    # do something with sheet
    return "foo"

pool = Pool(processes=4)
result = pool.map(function, ['sheet1', 'sheet2', 'sheet3', 'sheet4'])
# result will be ['foo', 'foo', 'foo', 'foo']

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 2020-08-14
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2016-12-07
    • 2020-03-12
    • 2017-11-17
    相关资源
    最近更新 更多