并行化for循环以并行执行HTTP调用?

2024-09-14 18:07:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个下面的代码,它按顺序运行for循环。我试图看看可以做些什么来有效地并行运行它

在for循环中,我调用validate方法,该方法进行HTTP调用,并基于该抛出异常(如果有)。一旦每个machinevalidate方法成功,我将增加n_succeeded变量,但如果有任何失败,我将向messages变量追加错误消息,如下所示:

def validate_all(
    session: Session, env: str, instance: str, new_config: str, action: str
) -> Tuple[
    int,        # Succeeded machines
    int,        # Total machines
    List[str],  # Error messages
]:

    with session.get(
        make_catalog_url(env=env),
        params={'ns': 'default', 'tag': instance}
    ) as response:
        response.raise_for_status()
        machines = response.json()

    n_succeeded = 0
    n_total = len(machines)
    messages = []

    # need to make this for loop run in parallel
    for machine in machines:
        try:
            validate(session, env, instance, new_config, action, machine)
            n_succeeded += 1
        except Exception as e:
            messages.append(str(e))

    return n_succeeded, n_total, messages

如何有效地并行运行上述for循环?machines的最大大小为100

我正在考虑使用Python多处理模块,但没有弄清楚如何在这里正确使用它