我是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)
使用thread pool:
在本例中,
executor.submit
将使用permission
参数调度write_permission_to_worksheet
执行。在executor.submit
不会等到提交的任务完成并在任务被调度后立即返回。在为了确保完成所有任务,您必须调用
executor.shutdown(wait=True)
,但是这个调用保证由nicewith ThreadPoolExecutor(max_workers=4) as executor:
语句执行所以线程池管理将一个新任务附加到工作线程,将线程切换到一个新任务,并在需要时关闭所有工作线程。在
关于你的评论:你最好使用线程,而不是进程。进程之间不共享内存,操作系统阻止一个进程访问另一个进程内存空间。公共资源访问(我假设您的工作表就是这样)对于流程来说可能是一个非常棘手的问题。另一方面,由一个进程启动的所有线程共享相同的内存。在
相关问题 更多 >
编程相关推荐