多处理:比cpu.count更多的进程

注意 :2天前我“进入” multiprocessing 。 所以我的理解是非常基本的。

我正在编写和申请上传到amazon s3桶。 如果文件大小较大( 100mb ),Ive使用multiprocessing模块中的pool实现了并行上传。 我使用的是core i7的机器,我的cpu_count8 。 我的印象是,如果我做pool = Pool(process = 6)我使用6内核,文件开始上传,前6个部分的上传同时开始。 要查看当process大于cpu_count时会发生什么,我输入了20(意味着我想使用20个内核)。 令我惊讶的是,程序开始同时上传20个零件(我使用较小的chunk size以确保有足够的零件),而不是获得一大块错误。 我不明白这种行为。 我只有8核心,所以他不能接受20的输入? 当我说process=6 ,它实际上是否使用6个线程? 这可能是唯一的解释20是一个有效的输入,因为可以有1000线程。 有人可以向我解释这一点。

编辑:

我从这里借用了代码。 我只是稍微改变了它,其中我要求用户选择核心用法,而不是将parallel_processes设置为4


在您的计算机上并行运行的进程数量不受内核数量的限制。 实际上,您的计算机上可能有数百个程序正在运行 - 每个程序都有自己的进程。 为了使它工作,操作系统将8个处理器中的一个分配给每个进程或线程只是暂时的 - 在某些时候它可能会停止,另一个进程将取代它。 看看并发编程和并行编程有什么区别? 如果你想了解更多。

编辑:在上传示例中分配更多流程可能有意义,也可能没有意义。 从磁盘读取并通过网络发送通常是python中的阻塞操作。 可以暂停等待其大块数据读取或发送的进程,以便另一个进程可以启动其IO。 另一方面,如果进程数过多,文件I / O或网络I / O将成为瓶颈,并且由于进程切换所需的额外开销,程序将会减速。

链接地址: http://www.djcxy.com/p/79389.html

上一篇: Multiprocessing : More processes than cpu.count

下一篇: What do the different (HotSpot) JVM thread types do?