如何使用python multiprocessing.Process捕获作业状态

时间:2016-04-22 02:40:02

标签: python python-3.x python-multithreading python-multiprocessing

(使用Python 3.4)

这个问题是关于识别使用multiprocessing.Process运行的作业的完成情况,并将作业的最终结果发送到另一个函数以进行进一步处理。

我使用multiprocessing.Process并行运行6个unix作业。所有6个作业都使用shell脚本提交为./runme,其中runme是一个简单的shell脚本,其命令行调用工具。

#!/bin/csh
nc run -r CPUS/4 -- qrc -cmd designname.ccl 

nc就像bsub

此运行的最终结果会创建一个文本文件,该文件将被另一个后处理脚本使用。

我现有的Python代码具有以下逻辑:

def sub_runqrc (designname, outputdir):
    qrcrun_process = subprocess.Popen("./"+runme, shell+true, cwd=designdir, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    for line in qrcrun_process.stdout:
         ### grep for Job ID ###
         return_dict.update({designname:<jobID>})
    return (return_dict)


#Main function logic
for line in designlist:
    #### designlist is a file and it has six names in it ####
    #### other logic #####
    qrc_processes = multiprocessing.Process(target=sub_runqrc, args=(line, testcase_dir))
    qrc_jobs.append(qrc_processes)
    qrc_processes.start()
for proc in qrc_jobs:
    proc.join()

从上述逻辑中,只要收集了作业ID,就会完成每个过程。但实际上另一种工具正在继续在农场上工作。我如何知道作业的状态是否已完成?并在输出文本文件可用时调用另一个函数来启动后处理。

我目前每隔15分钟使用一个周期性功能,使用类似于bjobs的命令来检查作业的状态(在&#34; nc&#34;它是nc info jobId)但作业信息不可用作业完成后立即在服务器上

找出工作是否完成的最佳方法是什么?有没有办法可以将退出代码类型的东西捕获到main函数中的变量中,并调用将namename传递给另一个函数来开始后处理输出文件?

def sub_postprocess (designname, output.txt, outputdir):
    ### Run post process ####

    return ("Post processing done for "+designname)

使用多处理。处理正确的方法还是以其他方式提交这类作业?

注意:我开始在15天前在python中编写代码。苦苦于理解类和多进程。有什么建议/劝告吗?

如果我的问题不明确,请告诉我。

0 个答案:

没有答案