gpt4 book ai didi

Python - 具有两个参数的多处理 StarMap

转载 作者:行者123 更新时间:2023-12-05 03:45:10 28 4
gpt4 key购买 nike

我有一个可以并行运行多个查询的函数,但是我在使用 multiprocessing 运行我的函数时遇到了一些麻烦。我有这段代码:

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 的东西,但这至少应该(尝试)使用正确的参数调用函数。

关于Python - 具有两个参数的多处理 StarMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66069021/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com