在这个任务中有两个涉及的的python脚本。
当前的任务要求我在GCP实例上的29个可用区域中的每个区域运行一个长进程(每个过程大约需要一两天,这是第一个python脚本)。为了尽可能快地完成任务,在一次分离出29个VM之后,我尝试在每个实例中同时运行每个进程。
由于通过SSH对每个实例手动运行first脚本非常麻烦,所以我编写了一个python脚本(第二个脚本),该脚本将SSHs放入每个区域的VM中,并运行前面提到的first脚本。
在不同区域运行 first script的第二个脚本的问题是,在第二个区域的VM中运行完之后,才开始在第二个区域的VM中运行first script,而需要第二个脚本在每个区域运行first scriptE 219
,而无需等待E 120
启动的进程结束。
我在第二个脚本中使用子进程()在每个VM中运行第一个脚本。
下面的代码是第二个脚本
for zone, instance in zipped_zone_instance:
command = "gcloud compute ssh --zone " + zone + " " + instance + " --project cloud-000000 --command"
command_lst = command.split(" ")
command_lst.append("python3 /home/first_script.py")
subprocess.run(command_lst)
我需要subprocess.run(command_lst)一次运行29个区域,而不是只在第一个区域的进程结束后才运行第二个区域。
下面的代码是第一个脚本
for idx, bucket in enumerate(bucket_lst):
start = time.time()
sync_src = '/home/' + 'benchmark-' + var_
subprocess.run(['gsutil', '-m', '-o', 'GSUtil:parallel_composite_upload_threshold=40M', 'rsync', '-r', sync_src, bucket])
end = time.time() - start
time_lst.append(end)
tput_lst.append(tf_record_disk_usage / end)
我可以在第二个脚本或第一个脚本中修复什么来实现我想要的?
发布于 2022-03-16 22:41:18
在每个脚本中使用Popen(command_lst, shell=True)
关闭您的Popen(command_lst, shell=True)
,并循环执行命令列表,如下面的示例所示,以便并行运行进程。
为了简单起见,您可以使用任意命令来实现Popen并行运行进程。
from subprocess import Popen
commands = ['ls -l', 'date', 'which python']
processes = [Popen(cmd, shell=True) for cmd in commands]
https://stackoverflow.com/questions/71504877
复制相似问题