你能用Python队列线程或进程吗?

时间:2014-03-30 21:55:45

标签: python multithreading ffmpeg

我有一个在修改文件后保存文件的功能(由ffmpeg修改的视频文件)。该函数使用二进制文件,在其上调用子进程。我遇到的问题是如果我在第一次运行后不久就调用了这个函数(即第一个进程仍在运行),第二个进程将不会执行,或者它将覆盖第一个进程。

我仍然对进程和线程不熟悉,而且我不想让函数创建一堆线程,因为我担心这可能会失控(毫无根据的恐惧?)。 当二进制文件空闲时,如何获取排队其他作业并执行的功能?

代码:

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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')