Python ProcessPoolExecutor传递多个参数

Python ProcessPoolExecutor传递多个参数,python,Python,ESPNPlayerFree class ESPNPlayerFree: def __init__(self, player_id, match_id, match_id_team): ... 团队列表1: [('277906', 'cA2i150s81HI3qbq1fzi', 'za1Oq5CGHj3pkkXWNghG'), ('213674', 'cA2i150s81HI3qbq1fzi', 'za1Oq5CGHj3pkkXWNghG')] 代码 TypeError:\uuuu in

ESPNPlayerFree

class ESPNPlayerFree:

def __init__(self, player_id, match_id, match_id_team):
...
团队列表1:

 [('277906', 'cA2i150s81HI3qbq1fzi', 'za1Oq5CGHj3pkkXWNghG'), ('213674', 'cA2i150s81HI3qbq1fzi', 'za1Oq5CGHj3pkkXWNghG')]
代码

TypeError:
\uuuu init\uuuuuuuuuuu()缺少2个必需的位置参数:“match\u id”和“match\u id\u team”
编辑:

对于多处理池,您可以使用,它可以使用start
*
将元组解压为参数

ESPNPlayerFree( *('277906', 'cA2i150s81HI3qbq1fzi', 'za1Oq5CGHj3pkkXWNghG') ) 
ESPNPlayerFree( *('213674', 'cA2i150s81HI3qbq1fzi', 'za1Oq5CGHj3pkkXWNghG') ) 
似乎
concurrent.futures.ProcessPoolExecutor
没有
starmap()
,因此它将其作为一个参数发送-
元组

ESPNPlayerFree( ('277906', 'cA2i150s81HI3qbq1fzi', 'za1Oq5CGHj3pkkXWNghG') ) 
ESPNPlayerFree( ('213674', 'cA2i150s81HI3qbq1fzi', 'za1Oq5CGHj3pkkXWNghG') ) 
您需要在函数中解包它

def __init__(self, data):
    player_id, match_id, match_id_team = data

由于
starmap
不可用,请为此创建帮助器工厂函数:

def player_helper(args):
    return ESPNPlayerFree(*args)

with concurrent.futures.ProcessPoolExecutor(max_workers=30) as executor:
    results = list(executor.map(player_helper, teamList1))
或者将其转换为类
ESPNPlayerFree
classmethod
,如果它更有意义:

class ESPNPlayerFree:

...

@classmethod
def expand_args(cls, args):
    return cls(*args)


with concurrent.futures.ProcessPoolExecutor(max_workers=30) as executor:
    results = list(executor.map(ESPNPlayerFree.expand_args, teamList1))

我现在得到这个错误
AttributeError:'ProcessPoolExecutor'对象没有属性'startmap'
很抱歉,多处理池没有。似乎
concurrent.futures.ProcessPoolExecutor
没有它,您将不得不使用
player\u id、match\u id、match\u id\u team=data
完美地工作,数据更新很快,但现在我遇到了这个错误
递归错误:获取对象的str时超过了最大递归深度
我应该增加限制还是有解决方法?我不知道你要做什么,但你必须使用递归吗?如果不使用递归,就不能只使用一些循环吗?我没有使用递归,只是
ESPNPlayerFree
类非常庞大,并发运行15次会抛出错误。我已将限制增加到10k,不再出现递归错误,但此错误与以前一样
concurrent.futures.process.BrokenProcessPool:进程池中的进程在future运行或挂起时突然终止。
class ESPNPlayerFree:

...

@classmethod
def expand_args(cls, args):
    return cls(*args)


with concurrent.futures.ProcessPoolExecutor(max_workers=30) as executor:
    results = list(executor.map(ESPNPlayerFree.expand_args, teamList1))