2014-03-30 39 views
0

我有一个功能可以在修改文件后保存文件(视频文件被ffmpeg修改)。该函数使用一个二进制文件,在其上调用一个子进程。我遇到的问题是,如果我在第一次运行后不久(即第一个进程仍在运行)调用这个函数,那么第二个将不会执行,否则它将覆盖第一个。我不想让这个函数创建一堆线程,因为我恐怕这可能会失控(没有根据的恐惧?)。但是我并不想让这个函数创建一堆线程,因为我担心这可能会失控。 当二进制文件是免费的时候,如何获得排队其他作业并执行它的功能?你可以在Python中排队线程或进程吗?

代码:如果存在

pipe = sp.Popen([ffmpeg_binary,"-i", sample_vid, "-vcodec", "copy", "-acodec", "copy", 
       "-ss", start_time, "-t", end_time, "-sn", output_file_name ]) 

的输出文件名变量检查。如果它不存在,它将设置变量等于输入文件名+ index + .extension。

+0

你有线程了吗?这个过程完成后你做什么?你可以使用不同的输出文件名吗? – Eevee

+0

没有线程已经为此。只是别的。 – Jeff

回答

2

在继续下一步之前,您可以在每个过程中调用subprocess.wait()。这会阻塞,直到过程完成,确保所有子过程顺序运行。请参阅documentation

+0

哦谢谢你的链接!因此,在一个循环中,仅用于sp_list中的sub_process:sub_process.whatever()sub_process.wait() – Jeff

+0

是否类似于thread.join()? – Jeff

+0

是的,非常相似。 – DNA

0

如果您只想调用外部命令而不是使用所有进程/线程低级别的API进行播放,请使用库sh

然后,你可以做这样的:

from sh import ffmpeg 

ffmpeg(arg1, arg2) # call 1 
ffmpeg(arg2, arg3) # call 2 

# if you want custom binary 

from sh import Command 
ffmpeg = Command('/path/to/ffmpeg') 
+0

这是跨平台还是只是linux? – Jeff

+0

我不确定,我从来没有在Windows上使用它。在文档中,我没有发现任何关于它的说明。所以,试试吧。 – spinus

相关问题