使用多处理加载不适合我的SSHD驱动器的文件?

时间:2015-10-18 14:33:54

标签: python multiprocessing python-multiprocessing

我有一个脚本,它使用多处理库同时从文件加载数据。

我的机器有一个带8核的CPU和固态混合驱动器。

我没有期待任何改进,但发现脚本的多处理版本比单个进程版本快3倍(5秒对15秒)。我认为这是因为我的很多文件都被压缩了,所以有些文件是#34; loading"时间实际上将用于解压缩数据。

无论如何,我想知道,这种做法可能对我的硬件有害吗?当我在过去使用普通硬盘驱动器做类似的事情时,会导致大量磁盘抖动。虽然在我的SSHD驱动器上似乎并非如此。

作为第二点,我发现这种语法很难看:

def load_market( args):
    market_id, market = args

有没有办法让我有一个函数签名:

def load_market( market_id, market ):
    market_id, market = args

代替?目前,如果我尝试第二个版本,我会收到此错误:

TypeError: load_market() missing 2 required positional arguments: 'market' and 'data'

我的加载代码的一部分在这里:

import multiprocessing as mp

def load_catalogues_mp( catalogue_stores ):
    result = {}
    for m, catalogue_store in catalogue_stores.items():
        print( m, catalogue_store )
        market_series = load_catalogue_mp( catalogue_store )
        result.update( market_series )
    return result

def load_catalogue_mp( catalogue_store ):
    num_pools = mp.cpu_count()
    pool      = mp.Pool( num_pools )
    inputs    = [ ( market_id, market ) for market_id, market in catalogue_store.items() ]
    cms_list  = pool.map( load_market, inputs )
    pool.close()
    pool.join()

    return dict( zip( catalogue_store.market_ids, cms_list ) )

def load_market( args):#market_id, market, data ):
    market_id, market = args
    cms = mod.CompactMarketSeries( market )
    cms.load()
    return cms

with Timer( 'Loading catalogues' ) as t:
    market_series = load_catalogues_mp( catalogue_stores )
print( 'loaded catalogues' )

3 个答案:

答案 0 :(得分:2)

是的,使用机械硬盘驱动器进行多处理可能会导致颠簸,但尽管有名称,但驱动器并不“坏”;它只是慢了。

SSHD本质上不能破坏。它没有阅读臂,它的来回运动构成了颠簸。

同样的原因是你的乌龟随着年龄的增长而无法变白。

答案 1 :(得分:2)

使用SSHD进行多处理并不差,实际上这也是SSHD驱动器如今被如此广泛使用的原因之一。使用SSHD进行多处理几乎就像在RAM内存中使用多处理一样:这种类型的内存可以很好地处理它。

对于较旧的硬盘驱动器,尤其是使用VPS时,可能会出现大量EOF错误。 这就是为什么SSHD比传统硬盘更强大的原因。

答案 2 :(得分:2)

正如其他一些用户所提到的,SSD与传统的硬盘驱动器根本不同。 HDD包括旋转磁盘和位于非常靠近盘片的读/写头。磁头在磁盘半径上伸展和缩回,以选择不同的磁道。将磁头移动到所需磁道所需的时间称为寻道时间。此外,一旦磁头到达所需的轨道,它需要等待盘片旋转到所需的扇区。这种延迟称为寻道延迟。寻道时间和延迟的组合使得HDD最适合于顺序I / O模式,因为需要较少的磁头移动。虽然这取决于您的端到端设计,但这是多处理有可能降低HDD性能的地方。在多个进程中维护顺序I / O模式将很困难。

另一方面,SSD是一种存储设备,因为没有机械设备可以移动,因此随机访问不会受到惩罚。一切都以光速移动。写入SSD有点不同,因为只能写入擦除的扇区,并且只能分组擦除扇区。写入未擦除的扇区需要读取,修改和重写整个扇区组。