多处理Python中的异常处理

时间:2020-02-26 07:13:42

标签: python python-multiprocessing

我正在尝试使用多重处理来执行脚本。但是在出现错误的情况下,脚本不会引发异常并退出处理。是否有可能引发异常并退出执行。由于我是python的新手,所以我不知道该怎么做。

下面是我写的脚本:

import os 
import sys
import string
import multiprocessing as mp

path=sys.argv[1]

path_tpt=path+'/tpt_script'


""" Multiprocessing module to generate intermediate exports"""



total_tpt_file_list = []
for filename in os.listdir(path_tpt):
    total_tpt_file_list.append(os.path.join(path_tpt,filename))

total_tpt_file_list = list(filter(lambda x:x.endswith('.tpt'), total_tpt_file_list))
total_tpt_file_list = sorted(total_tpt_file_list)
print(total_tpt_file_list) 



def run_sed (file_list):
    x=file_list.rsplit("/", 2)
    y=x[0]
    file_name=x[2]
    print(file_name)
    path_ctl=str(y)+'/ctl_file'
    path_tpt=str(y)+'/tpt_script'
    path_log=str(y)+'/log'
    print("tbuild -f  "+ (file_list) + " -j  "+ 'tpt_chk_$$ '+ '> '+ os.path.join(path_log,file_name).split('.')[0]+'.log 2>>'+ os.path.join(path_log,file_name).split('.')[0]+'.log')
    status=os.system("tbuild -f  "+ (file_list) + " -j  "+ 'tpt_chk_$$ '+ '> '+ os.path.join(path_log,file_name).split('.')[0]+'.log 2>>'+ os.path.join(path_log,file_name).split('.')[0]+'.log')

try:    
    p = mp.Pool(processes=(mp.cpu_count()-1))
    total_file_list = p.map(run_sed,total_tpt_file_list)

finally:
    p.close()
    p.join()
    print("done")

请让我知道是否需要更多信息。

预先感谢。

1 个答案:

答案 0 :(得分:0)

鉴于我所看到的,

Python异常将被传播回去,我猜想您是想引发os.system调用中的错误。您需要执行

之类的操作
if status != 0: 
    raise Exception("eeek")

我真正建议您使用os.system https://docs.python.org/3/library/subprocess.html#subprocess.check_output而不是使用subprocess.check_output 它将自动检查子流程调用的状态代码,并使用状态代码和输出文本引发任何异常。因此,您的代码应类似于:

    subprocess.check_output(["tbuild", "-f"] + file_list + ["-j", "tpt_chk_$$", ...

您可能还想返回输出(return subprocess.check_output...