嵌套循环和参数的Python多处理示例
我是Python编程新手,我有一个关于循环中的多处理的问题,它必须保持位置。在我的示例中,我遍历多个AWS IAM帐户,并创建一个excel工作簿,其中包含多个工作表,每个帐户对应一个工作表。在每个帐户工作表的上下文中,我只需要返回一组与当前帐户相关的权限 但是,每个bucket需要的处理时间非常长,因为每个bucket中可能有400k以上的文件。但是这些呼叫本身对主机系统来说并不是很费力。因此,我希望一次检查4-6个桶,但仍然让它们正确地写在各自的表格上 我找不到类似的例子。你们中的一个好小伙子能给我指出正确的方向吗。下面是我的伪代码。我正在用Python2.7TIA做这个嵌套循环和参数的Python多处理示例,python,python-2.7,boto3,Python,Python 2.7,Boto3,我是Python编程新手,我有一个关于循环中的多处理的问题,它必须保持位置。在我的示例中,我遍历多个AWS IAM帐户,并创建一个excel工作簿,其中包含多个工作表,每个帐户对应一个工作表。在每个帐户工作表的上下文中,我只需要返回一组与当前帐户相关的权限 但是,每个bucket需要的处理时间非常长,因为每个bucket中可能有400k以上的文件。但是这些呼叫本身对主机系统来说并不是很费力。因此,我希望一次检查4-6个桶,但仍然让它们正确地写在各自的表格上 我找不到类似的例子。你们中的一个好小伙
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)
使用:
在本例中,executor.submit
将使用permission
参数计划将权限写入工作表
执行
executor.submit
不会等到提交的任务完成并在任务计划完成后立即返回
要确保所有任务都已完成,您必须调用executor.shutdown(wait=True)
,但此调用保证由nice以ThreadPoolExecutor(max\u workers=4)作为执行者执行:
语句执行
所以线程池管理将一个新任务附加到工作线程,将线程切换到一个新任务,并在需要时关闭所有工作线程
关于你的评论:你最好使用线程,而不是进程。内存不在进程之间共享,操作系统阻止一个进程访问另一个进程内存空间。对流程来说,访问公共资源(我假设您的工作表是这样)可能是一个非常棘手的问题。另一方面,由一个进程启动的所有线程共享相同的内存 我还要强调一点,我不确定线程或多处理是否更好。我也愿意听取关于这方面的建议。谢谢。谢尔盖,谢谢你的详尽答复。但是,最棘手的部分是:acl=get\u s3\u bucket\u acl(BucketName=bucket),执行者如何处理必须返回的内容?@mumbles你可以提交3个操作(
get\u s3\u bucket\u acl
,获得它的许可,将其写入工作表)作为单个任务,不是吗?@mumbles实际上executor.submit(…)
返回future
对象。它有result()
方法,但显然blocks@mumbles我使答案符合条件
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)