同时加载和处理数据 - Python

问题描述 投票:0回答:1

我有大量数据需要处理,并且存在一些 IO 限制。最终,读取和写入数据所花费的总时间与处理数据所花费的总时间大致相同。然而,虽然我可以并行化数据处理,但我无法并行化 IO。

有没有一种不错的方法可以对 python 进程进行多线程处理,其中我用一个线程加载数据,其余线程异步读取和操作数据?

假设我有

L
(负载)和
P
(进程),并且每个都位于一个块中。让线程运行会更高效吗:

LLLLLLL

另一个同时运行

PPPPPPP

能跑得有多快?或者最终会以同样快的速度让并行块运行

LP LP LP LP

后一种方法的问题似乎是(a)它最终可能会将每个进程都限制在慢得多的 L 后面,特别是如果计算机尝试同时加载所有进程,这意味着将恒定的 IO 分配给多个线程, (b) 不允许我按工作的相对比例来分配工作。例如,如果我最终对数据执行了更多操作,并且处理每个块所需的时间比加载数据块的时间长 3 倍,那么我希望在处理端增加 3 倍的线程。 (c) 我不希望某些 L 不发生的时期,但理论上你可以想象这种情况以

LP
并行形式发生,其中在给定的时间点,一切都在
P
上进行。

最终这些问题可能是最小的,并且从可读性的角度来看,进行

LP
块配置更容易。但我真的不太了解。

谢谢!

python numpy parallel-processing
1个回答
0
投票

一个好的策略是让系统自行平衡,在具有 8 个核心的系统上,您可以拥有 8 个加载线程和 8 个处理线程以及一个最大大小为 8 或 16 的有界 queue,由所有工作人员共享,装载机

如果处理速度慢,则加载工作人员将被阻塞在队列中,处理速度将会加快。

如果加载速度很慢,那么处理工作人员应该耗尽工作并为加载程序提供 CPU 时间。

© www.soinside.com 2019 - 2024. All rights reserved.