Python 3.x 从多进程调用的子进程未完成
我有一组视频,我试图从中提取随机帧。有很多视频,所以我想并行工作,Python 3.x 从多进程调用的子进程未完成,python-3.x,ffmpeg,multiprocessing,subprocess,Python 3.x,Ffmpeg,Multiprocessing,Subprocess,我有一组视频,我试图从中提取随机帧。有很多视频,所以我想并行工作,ffmpeg可以为我拼接帧,所以这里是代码的重要部分: 导入操作系统 从TQM导入TQM 从joblib并行导入,延迟 从多处理导入当前\u进程 从子流程导入Popen vids_dir='只是一个字符串' out_dir='另一个字符串' 每个def过程(f): temp='temp'+str(当前\u进程()。\u标识[0]) os.mkdir(临时) proc=Popen(['ffmpeg-i'+vids_dir+'/'+f
ffmpeg
可以为我拼接帧,所以这里是代码的重要部分:
导入操作系统
从TQM导入TQM
从joblib并行导入,延迟
从多处理导入当前\u进程
从子流程导入Popen
vids_dir='只是一个字符串'
out_dir='另一个字符串'
每个def过程(f):
temp='temp'+str(当前\u进程()。\u标识[0])
os.mkdir(临时)
proc=Popen(['ffmpeg-i'+vids_dir+'/'+f+'+temp+'/'+f[:-4]+'.%03d.jpg&>/dev/null'],shell=True)#转换为帧
进程等待()
#做事
操作系统('rm-rf'+温度)#清理
并行(n_作业=10)(tqdm(os.listdir(vids_目录))中f的延迟(每个进程)(f)
我可以打印出传递给Popen
的命令,并在shell中执行它,它就可以工作了。我可以打开一个python3
会话,并从Popen
或子进程调用该命令。call
甚至os.system
,它可以工作。我甚至可以在我的Parallel
中设置n_jobs=1
,它可以工作
但是,当我真正并行化它的时候,我发现ffmpeg
并没有将其全部结果刷新到临时文件夹中;它只获取前一帧或前几帧
到底发生了什么事<代码>子流程和多处理
应该能够以这种方式混合使用