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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值