![从 shell 脚本执行时如何避免重新启动长时间运行且启动缓慢的 python 程序?](https://linux22.com/image/226125/%E4%BB%8E%20shell%20%E8%84%9A%E6%9C%AC%E6%89%A7%E8%A1%8C%E6%97%B6%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E9%95%BF%E6%97%B6%E9%97%B4%E8%BF%90%E8%A1%8C%E4%B8%94%E5%90%AF%E5%8A%A8%E7%BC%93%E6%85%A2%E7%9A%84%20python%20%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我使用 Whisper 转录声音文件。在我的硬件上,启动它需要几分钟甚至几十分钟(每次启动时都需要加载和处理几 GB 的数据)。我将其封装在一个 shell 脚本中,该脚本基本上只是在 for 循环中提供文件的耳语。
问题是 Whisper 会重新启动,并且需要在每个循环中重新加载所有数据。保留 Whisper“会话”并在前一个文件完成后在其中添加一个新文件会更快。这可以在 shell 脚本/for 循环“环境”中完成吗?
有两个问题需要考虑:
设置:我有三台机器在处理这个问题,处理网络目录中的文件,并且新文件不断添加到该目录中。
为了同步机器,我在 for 循环中做的第一件事是检查输入文件是否有相应的输出文件。如果没有,我
touch
这样的输出文件(例如,输入文件是“2023-Oct-25 15:25:12.aac”,然后我使用 touch“2023-Oct-25 15:25:12.aac”创建相应的文本文件。 TXT”)。
当我启动脚本时,这阻止我连接一个长命令行命令(类似于(伪代码)whisper 1.aac > 1.txt --model large --language English, 2.aac > 2.txt --model large --language French , 3.aac > 3.txt --model medium --language French
(请注意,三个示例中的参数不同) - 逗号表示新的“条目”。我不'不希望这能起作用。)现有文件,因为那不是静态“列表”。
此外,我想按大小顺序处理文件,因此当一台机器处理完一个文件时,它应该在源目录中查找并取最大的文件(这可能是执行开始后添加的文件)并进行处理。这个要求,就像不断添加新文件的事实一样,也阻止我在执行开始时使用完整的命令创建长的、完整的文本字符串。