【问题标题】:如何将 multiprocessing.Pool.map 与迭代器和分离输入一起用于函数
【发布时间】:2022-01-18 20:47:16
【问题描述】:

我怎样才能传递完整的参数,而不用在内核之间拆分它们,以运行 myfun 并同时传递集合中的相应元素 [1,2,3,4,5]

p=Pool(5)
p.map(myfun(df_A,df_B),[1,2,3,4,5])

如果我以这种方式实现它,该函数会获取参数 df_A 和 df_B 但不是集合中的元素

下面是 myfun 的示例:

def myfunc(df_A, df_B, e):
    do_something
    print(df_A.iloc[e],df_A.iloc[e])

e 是集合 [1,2,3,4,5] 的一个元素

【问题讨论】:

  • 你能显示 myfun 的代码吗?
  • 这只是一个例子,目的是让参数df_A,df_B和myfun中的集合的一个元素,无论函数看起来如何
  • 您不应该在map 调用中调用该函数。你应该只是通过它。并且取决于你的函数是如何定义的,你可能需要使用starmap
  • 函数看起来如何,或者更准确地说,它的 signature 看起来如何确实很重要...

标签: python multiprocessing


【解决方案1】:

您可以考虑这样的事情(可能有更好的方法):

from multiprocessing import Pool

def myfunc(a, b, c):
    print(a, b, c)

df_A = 1
df_B = 2

def main():
    with Pool() as pool:
        pool.starmap(myfunc,[[df_A, df_B, x] for x in range(1, 6)])

if __name__ == '__main__':
    main()

输出:

1 2 1
1 2 2
1 2 3
1 2 4
1 2 5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2013-07-16
    相关资源
    最近更新 更多