处理具有多线程环境的批处理文件

时间:2018-05-18 08:34:29

标签: python multithreading

我对python很新,所以这可能是一个基本问题,但请耐心等待。我正在尝试处理目录中存在的一堆音频文件。但由于文件数量非常庞大,因此该过程需要数小时。由于我正在做的任务/应用它是多余的,我计划对整个事情进行多线程处理,每个线程处理一批文件。

现在我事先并不知道文件名是什么,我不知道目录中有多少文件,我只能在运行程序并实际分析路径时知道这些事情。这是我对多线程这个问题的困惑:

  

线程如何知道哪个文件属于它的批处理?

如果我有一些列出所有这些文件的文件,我可以使用pandas或类似的库轻松地将此列表拆分为块,以便为每个线程分配工作负载,但在当前情况下,当我手头没有文件列表时混淆了哪个库使用(如果有的话)。有什么建议吗?

解决方法是在程序开始时创建所有文件名的列表,但我认为这样效率不高,因为我的文件范围可以是10到39到20之间的任何文件。 000。

1 个答案:

答案 0 :(得分:0)

由于您需要对每个文件进行一次处理,因此您需要协调线程以确保没有冲突。这意味着为每个线程指定工作 - 即为每个线程提供一组明确的文件。你可以通过获取整个文件列表并将其拆分来实现,或者你可以给每个线程一个"从"开始。并且"停在"路径,让他们按字母顺序浏览文件。

如果你在Linux环境中,另一种方法是让你的python脚本一次接受一个工作路径,然后使用xargs或类似的方法来运行多个进程:

ls target_directory | xargs -l -P4 python processing_script.py

此命令将使用4个进程在目标目录中的所有文件上运行处理脚本。进程数由-P之后的数字指定。

正如Sraw在评论中提到的,将任务划分到许多进程或线程可能实际上并没有加快速度;你应该对方法进行基准测试和比较。