我正在使用Python多处理在60个独立的Linux机器上并行运行数据库备份。最长运行过程的估计时间为6小时。很少有人在20分钟内完成。
import multiprocessing as mt
import subprocess
def remoteSSH(env, application, node, cmd):
command1="ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ForwardX11=no -l {} -n {} {}".format(application, node, cmd)
command1=command1.split()
process=subprocess.Popen(command1,
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output, stderr = process.communicate()
returncode = process.returncode
return [returncode, output, stderr]
def run_remote_db_backup(backup_database_meta):
ds,env,application,node = backup_database_meta.split(':')
cmd="/tmp/Backup.ksh >> /tmp/{}".format(ds)
#cmd='uname -a'
returncode, output, stderr = remoteSSH(env,application,node,cmd)
print returncode, output, stderr
print "{}:{}:{}".format(ds,node,cmd)
def backup_work(Master_Meta_Dictionary, logger_file, logger_stream):
# backup_database_meta is a list
backup_database_meta = dataserver_to_work_on(Master_Meta_Dictionary)
k=mt.Pool(len(backup_database_meta))
result=k.map(run_remote_db_backup, backup_database_meta)
k.close()
k.join()
# Master_Meta_Dictionary is a list
backup_work(Master_Meta_Dictionary, logger_file, logger_stream)
面临的问题1:在创建所有pid的backup_work定义完成后,pids开始在远程计算机上运行backup.ksh。当backup.ksh完成并且我希望看到下面的打印时出现问题。但只有在所有的pid完成任务后才会显示出来。我对此行为感到困惑,我希望在定义完成时看到打印件。如果我运行一个快速运行的命令行" uname -a",它会打印下面的print语句。
print "{}:{}:{}".format(ds,node,cmd)
面临的问题2:有时所有的工作都会完成工作,但不要退出并保持挂起。