对于磁盘上的IO读/写文件,默认情况下它几乎是阻塞操作。我一直在研究一个使用这种操作的项目(从磁盘读/写)并使用默认的numpy
阻塞IO here。这是一个很好的选择,直到我发现我正在处理非常大的数据集!!
我一直在努力改善项目的执行时间。在做基准测试后,我发现IO操作是瓶颈。因此,我现在应该想到除mobiusklein
默认阻塞IO之外的其他内容。阅读几天后,我发现有三种方法可供选择,可以减少IO时间:
我想知道哪种方法适合减少IO时间,因为我知道我的IO操作总是在磁盘(本地磁盘)上执行。我遇到了大量的图书馆,例如twisted,asyncio,aiofiles,multiprocessing和multithreading。因为我之前从未使用过IO异步或事件驱动的网络,所以我不确定从上面的三种方法中选择什么!
你们的建议和想法对我很有价值。提前谢谢
修改
特别感谢java.lang.NoSuchMethodError: scala.reflect.internal.Definitions$definitions$.classExistentialType(Lscala/reflect/internal/Types$Type;Lscala/reflect/internal/Symbols$Symbol;)Lscala/reflect/internal/Types$Type;
at scala.tools.nsc.symtab.classfile.ClassfileParser.processClassType$1(ClassfileParser.scala:670)
at scala.tools.nsc.symtab.classfile.ClassfileParser.sig2type$1(ClassfileParser.scala:679)
at scala.tools.nsc.symtab.classfile.ClassfileParser.sig2type$1(ClassfileParser.scala:709)
提出以下几点:
答案 0 :(得分:0)
如果开始编写输出所需的所有信息都位于MPI层次结构的一个节点中,和,您希望该节点仍能够为其他计算做出贡献,和< / em>你的其他计算调用释放GIL的C函数,你可以在每个节点上启动一个线程来在worker节点内执行I / O操作。这样可以避免以增加每个节点工作负载的不可预测性为代价将数据传输到专用编写器的开销。
如果您需要在开始编写之前聚合多个工作程序的结果,您将在MPI层次结构中创建一个专用的编写器节点,并专门将所有数据汇集到它,并使该节点负责弄清楚何时准备好将数据写出来。这可以通过一个线程来接收消息和一个线程来完成实际写入。如果作者不是主人,那么普通MPI可能无法做到这一点,在这种情况下,您可能需要混合其他类型的IPC,如multiprocessing
。