这是一个普遍的问题。我已经开发了一些代码,最初只是一系列命令。一旦运行良好,我便尝试使用Python的多处理模块来加快执行时间。但是,由于旧的串行代码和新的并行代码花费几乎完全相同的时间来处理给定的文件列表,因此似乎没有什么好处。
提供一些细节。该代码标识文件列表,并为每个文件:
脚本的串行版本遍历文件列表,而脚本的多处理版本本质上将文件列表传递给pool.map函数(我认为然后为每个cpu分配一个文件)。
我知道I / O操作无法通过多处理模块很好地扩展。但是我认为这里唯一的I / O操作是每个文件的原始打开和读取。我对什么构成I / O的理解有误吗?我还读到numpy在多处理中不能很好地发挥作用,这可能也是问题的一部分。
实际上,在写这篇文章时,我发生了这样的事,即I / O是指对内存的读写,而不仅仅是对磁盘的读写(我认为便士下降了)。该脚本执行大量的计算和新数组以及新列表的生成,所以现在我想所有这些都代表I / O操作,这就是为什么没有改进的原因?
所以,我并不是真正要解决的问题,只是要是我的理解不正确时,请让我直言不讳。
谢谢