Python多处理:锁定是否适合(大)磁盘写入?

时间:2015-04-14 18:59:15

标签: python locking multiprocessing

我有多处理代码,其中每个进程执行磁盘写入(酸洗数据),并且生成的pickle文件可以超过50 MB(有时甚至超过1 GB,具体取决于我正在做什么)。此外,不同的进程不会写入同一个文件,每个进程都会写一个单独的文件(或一组文件)。

围绕磁盘写入实现锁定是否是一个好主意,以便一次只有一个进程写入磁盘?或者最好让操作系统对其进行排序,即使这意味着4个进程可能试图同时向磁盘写入1 GB?

1 个答案:

答案 0 :(得分:2)

只要进程不在同一个文件上进行战斗;让操作系统排除它。这是它的工作。

除非您的进程尝试将数据转储到一次大写中,否则操作系统可以更好地安排磁盘写入。 如果您确实使用了一个大写,那么您可以尝试将其分成较小的块。这可能会让操作系统更好地处理它们。

当然,你会在某个地方达到极限。您的程序可能是CPU绑定的,内存限制的或磁盘绑定的。它可能会根据输入或负载达到不同的限制。 但是,除非您 如何解决这个问题,我说不要打扰。因为write系统调用实际意味着数据直接发送到磁盘的日子已经过去了。

目前,大多数操作系统都使用未分配的RAM作为磁盘缓存。硬盘驱动器也有内置缓存。除非你禁用这两个(这会给你一个巨大的性能命中),你的程序完成write和实际数据之间会有珍贵的小连接击中盘子或闪光。

您可以考虑使用memmap(如果您的操作系统支持它),并让操作系统的虚拟内存为您完成工作。参见例如architect notes for the Varnish cache