【发布时间】:2018-05-23 03:46:06
【问题描述】:
我有 6 个大文件,每个文件都包含一个字典对象,我使用 pickle 函数将其保存在硬盘中。按顺序加载所有这些大约需要 600 秒。我想同时开始加载所有这些以加快进程。假设它们都具有相同的大小,我希望在 100 秒内加载它们。我使用 multiprocessing 和 apply_async 分别加载它们中的每一个,但它像顺序一样运行。这是我使用的代码,它不起作用。 该代码适用于其中 3 个文件,但其中 6 个文件相同。我把第三个文件放在另一个硬盘上,以确保 IO 不受限制。
def loadMaps():
start = timeit.default_timer()
procs = []
pool = Pool(3)
pool.apply_async(load1(),)
pool.apply_async(load2(),)
pool.apply_async(load3(),)
pool.close()
pool.join()
stop = timeit.default_timer()
print('loadFiles takes in %.1f seconds' % (stop - start))
【问题讨论】:
-
如果文件存储在同一个卷中,您将受到 I/O 的限制。因此,并行加载文件不会加快进程,更糟糕的是它会减慢速度,因为您可能会增加对硬盘驱动器的随机访问次数。最好按顺序加载文件,抱歉。
-
您的瓶颈可能是大容量存储。即使使用并行处理,它仍将是瓶颈,并且可能会变得更糟。
-
我在这台机器上有多个硬盘,我将第三个文件放在不同的硬盘中,这实际上是一个并行文件系统,使用 OpenMP 我可以同时读取具有多个内核的大文件。我想用 python 达到同样的性能。
标签: python python-3.x parallel-processing python-multiprocessing python-asyncio