Python:多处理问题

时间:2017-11-07 05:21:26

标签: python multiprocessing

我正在使用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:有时所有的工作都会完成工作,但不要退出并保持挂起。

0 个答案:

没有答案