如何使用线程和子进程模块生成并行bash进程?当我启动线程时,第一个答案就在这里:如何在Python中使用线程?,bash进程按顺序而不是并行运行.
我有以下代码将md5sums写入日志文件
for file in files_output:
p=subprocess.Popen(['md5sum',file],stdout=logfile)
p.wait()
Run Code Online (Sandbox Code Playgroud)
这些是并行写的吗?即如果md5sum对其中一个文件花费很长时间,那么在等待前一个文件完成之前是否会启动另一个文件?
如果上面的答案是肯定的,我可以假设写入日志文件的md5sums的顺序可能因md5sum对每个文件的使用时间而有所不同吗?(有些文件可能很大,有些文件很小)
我希望能够并行运行多个进程,并且能够随时使用stdout.我该怎么办?我是否需要为每个subprocess.Popen()呼叫运行线程,什么?
我遇到了让两个子进程一起运行的问题.
第一个子流程是视频流的转码:
subprocess.Popen("ffmpeg -i input output", shell=True)
Run Code Online (Sandbox Code Playgroud)
我需要在程序的后台运行,将视频从我的IP摄像机转码为mjpeg流.
第二个子进程是Openalpr守护进程,它查看mjpeg流并返回它在流中看到的汽车牌照.
subprocess.Popen("alprd -f", shell=True)
Run Code Online (Sandbox Code Playgroud)
以下是尝试运行两个子进程的python测试代码示例:
import subprocess
subprocess.Popen("ffmpeg -i input output", shell=True)
subprocess.Popen("alprd -f", shell=True)
Run Code Online (Sandbox Code Playgroud)
当我这样做时,ffmpeg转码工作正常,我可以查看转码的mjpeg流,我可以在控制台中看到ffmpegs详细输出.但是,alprd守护程序似乎没有按预期返回任何数字牌照.实际上,我在控制台窗口中看不到alprd的任何输出.
如果我只使用一个子进程运行上面的代码就可以了
import subprocess
subprocess.Popen("ffmpeg -i input output", shell=True)
Run Code Online (Sandbox Code Playgroud)
工作正常,同样如下:
import subprocess
subprocess.Popen("alprd -f", shell=True)
Run Code Online (Sandbox Code Playgroud)
如果我运行上面两个工作代码片段中的任何一个 - 同时在另一个Linux终端中运行另一个命令,它一切正常.
我显然不了解子流程的内容,它们之间显然是相互冲突的,但任何人都可以解释发生了什么以及如何解决问题?
谢谢!