繁体   English   中英

Python - 具有两个 arguments 的多处理星图

[英]Python - Multiprocessing StarMap with two arguments

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

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)))它运行良好,但是我还需要通过 cursor object。

我怎么能这样做?

我遇到以下错误:

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

您的代码存在一些问题:

  • 您使用参数调用run ,然后将结果传递给starmap ,但是您必须将 function 及其参数分别传递给starmap
  • 您的参数首先是所有查询的乘积的元组,然后是 cursor,但您希望将每个查询组合与 cursor 结合起来
  • 你的 function 需要一个参数,然后你在 function 中解压缩,所以你应该使用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的东西,但这至少应该(尝试)使用正确的参数调用 function。

pool.starmap需要两个 arguments:function 和 arguments 列表。

从文档:

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 ])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM