Python -带两个参数的多处理StarMap



我有一个函数,并行运行多个查询,但我有一些麻烦,使用多处理多于参数运行我的函数。我有这样的代码:

def run(args):
query, cursor = args
cursor.execute(query)
with multiprocessing.Pool(processes=10) as pool:
args = (product(queries),cursor)
results = pool.starmap(run(args))

如果我只运行pool.starmap(run(product(queries))),它工作得很好,但是我需要传递光标对象。

我怎么能做到呢?

我有以下错误:

TypeError: starmap() missing 1 required positional argument: 'iterable'

你的代码有一些问题:

  • 你用参数调用run,然后把结果传递给starmap,但是你必须把函数和它的参数分别传递给starmap
  • 你的参数是一个元组,首先是所有查询的结果,然后是游标,但是你更希望将这些查询组合与游标
  • 结合起来
  • 你的函数需要一个参数,然后在函数内部解包,所以你应该使用map;对于starmap,应该是def run(query, cursor)

试试这个:

import multiprocessing
import itertools
def run(args):
query, cursor = args
print("running", query, cursor)
queries = ["foo", "bar", "blub"]
cursor = "whatever"

with multiprocessing.Pool(processes=10) as pool:
args = ((args, cursor) for args in itertools.product(queries))
results = pool.map(run, args)

可能有更多的"上游"。错误,像SSLSocket的东西,但这至少应该(尝试)调用函数与正确的参数。

pool.starmap接受两个参数:函数和参数列表。

From the docs:

pool.starmap(func, [(1,2), (3, 4)])
# results in [func(1,2), func(3,4)]
# I guess in your case would be
pool.starmap(run, [ product(queries), cursor ])

相关内容

  • 没有找到相关文章

最新更新