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级别不对。。会阻塞等待