如何使用多处理来并行化收集符合给定条件的项目的过滤函数



我的程序生成可能的球队,然后为梦幻篮球过滤有效的球队,它有以下限制:

  • 每队7名球员
  • 预算小于或等于7000万
  • 每个位置至少有一名球员(PG、SG、SF、PF、C(

以下是球员的定义和球队的例子:

from collections import Counter
from dataclasses import dataclass
from itertools import combinations
BUDGET = 70.0
MINIMUM_BUDGET_USED = BUDGET * 0.985
PLAYERS_PER_TEAM = 7
@dataclass
class Player:
full_name: str
club: str
position: str
price: float
team_example = (
Player(full_name='Jarred Vanderbilt', club='MIN',position='PF', price=5.6),
Player(full_name='Doug McDermott', club='SAS', position='SF', price=4.6),
Player(full_name='Mohamed Bamba', club='ORL', position='C', price=9.3),
Player(full_name='Caris Levert', club='IND', position='SG', price=9.0),
Player(full_name="De'Aaron Fox", club='SAC', position='PG', price=11.8),
Player(full_name='Giannis Antetokounmpo', club='MIL', position='PF', price=16.0),
Player(full_name='Julius Randle', club='NYK', position='PF', price=13.6)
)

生成了7个玩家的所有可能组合:

def generate_teams(players, players_per_team=PLAYERS_PER_TEAM):
return combinations(players, players_per_team)

我只想保留有效的:

def keep_valid_teams(possible_teams):
return [pt for pt in possible_teams if is_valid_team(pt)]
def is_valid_team(possible_team):
return all([are_correct_positions(possible_team),
is_valid_budget(possible_team),])
def are_correct_positions(possible_team):
positions = Counter(p.position for p in possible_team)
return len(positions) == 5 and max(positions.values()) <= 3
def is_valid_budget(possible_team):
budget_used = sum(p.price for p in possible_team)
return budget_used >= MINIMUM_BUDGET_USED and budget_used <= BUDGET

我的问题是如何使用多处理来并行化keep_valid_teams()函数。

这样的东西应该可以工作。你需要把你的函数变成一个map((

from multiprocessing import Pool
def keep_valid_teams(possible_teams):
with Pool(5) as p:
is_valid_team_list = p.map(is_valid_team, possible_teams)
return [pt for pt, is_valid_team in zip(possible_teams, is_valid_teams_list) if is_valid_team]

最新更新