Python 多进程multiprocessing.Process是否需要阻塞等待

it2022-12-30  63

def process(cmd, num, group_name, func_name): print('Process:', num) out = run_cmd(cmd) cur_work_path = MODULES_DICT[group_name]["work_path"] output_file_path = os.path.join(cur_work_path, func_name+'_output.txt') with open(output_file_path,'w') as output_txt: output_txt.write(out) output_txt.close() upload_log(output_file_path, group_name, func_name) if 'Output dir: ' in out: output_dir = out.split('Output dir: ')[1].split(r'\n')[0] if os.path.exists(output_dir): upload_log(output_dir,group_name,func_name) return def run_test(group_name,): for path, dirs, files in os.walk(test_json_path): for file in files: match = re.match(testCasePtn, file) if not match: continue file_path = os.path.join(path,file) index+=1 func_name = match.groups()[0] cmd = get_test_cmd(file_path, index) p = multiprocessing.Process(target=process, args=(cmd, index, group_name, func_name)) p.start() p.join()

已知:

process()是阻塞的,要执行很久很久才能返回。 process有个配置文件conf可配置RunFinishTime,尝试设定4h,2h后一直不能如预期结束进程。导致进程超6h被强制kill掉。 之前未使用多进程,是串行执行的,经过nc看进程log,返现实际run time并不如预期,得出结论,是conf文件配置的是针对每条单独run cmd的时间。 但串行多个当然不能如期结束了,等于是实际时间是累加了。

解决思路:多进程 使用多进程库就是为了解决上述串行脚本的问题。但测试发现,多进程Process创建时,居然是还是阻塞在了run_cmd一步。没有继续再创建新Process。

解决方法:

def run_test(group_name,): p = multiprocessing.Process(target=process, args=(cmd, index, group_name, func_name)) p.start() p.join() // join级别不对。。会阻塞等待
最新回复(0)