嵌套循环和参数的Python多处理示例

2024-03-28 11:32:47 发布

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

我是Python编程新手,有一个关于循环中的多处理必须保持位置的问题。在我的示例中,我遍历多个AWS IAM帐户,并创建一个excel工作簿,其中包含多个工作表,每个帐户对应一个工作表。在每个帐户工作表的上下文中,我需要返回一组仅与当前帐户相关的权限。在

但是,通过每个bucket所需的处理时间非常长,因为每个bucket中可以有超过400k个文件。但通话本身对主机系统的负担并不大。所以我希望一次检查4-6个桶,但还是要把它们正确地写在各自的表格上。在

我找不到一个类似的例子。你们中的一个能给我指点方向吗。我的伪代码如下。我用python2.7tia来做这个!在

accounts = get_aws_iam_accounts()

for account in accounts:
    Add_worksheet_to_workboook(account)

    buckets = get_s3_bucket_list()

    for bucket in buckets:
        acl = get_s3_bucket_acl(BucketName=bucket)
            permission = acl.get('Grantee').get('URI')

            if permission != None
                write_permission_to_worksheet(permission)

Tags: toinforgets3bucket编程帐户
1条回答
网友
1楼 · 发布于 2024-03-28 11:32:47

使用thread pool

accounts = get_aws_iam_accounts()

with ThreadPoolExecutor(max_workers=4) as executor: # configure number of threads

    for account in accounts:
        Add_worksheet_to_workboook(account)

        buckets = get_s3_bucket_list()

        for bucket in buckets:
            executor.submit(write_perm_to_worksheet, bucket)


def write_perm_to_worksheet(bucket):
    acl = get_s3_bucket_acl(BucketName=bucket)
    permission = acl.get('Grantee').get('URI')
    if permission != None
        write_permission_to_worksheet(permission)

在本例中,executor.submit将使用permission参数调度write_permission_to_worksheet执行。在

executor.submit不会等到提交的任务完成并在任务被调度后立即返回。在

为了确保完成所有任务,您必须调用executor.shutdown(wait=True),但是这个调用保证由nice with ThreadPoolExecutor(max_workers=4) as executor:语句执行

所以线程池管理将一个新任务附加到工作线程,将线程切换到一个新任务,并在需要时关闭所有工作线程。在

关于你的评论:你最好使用线程,而不是进程。进程之间不共享内存,操作系统阻止一个进程访问另一个进程内存空间。公共资源访问(我假设您的工作表就是这样)对于流程来说可能是一个非常棘手的问题。另一方面,由一个进程启动的所有线程共享相同的内存。在

相关问题 更多 >