Python ProcessPoolExecutor传递多个参数
ESPNPlayerFreePython 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
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))