多处理:多于cpu.conn的进程

2024-05-09 02:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

注意:我两天前“闯入”了multiprocessing的土地。所以我的理解很基础。

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

编辑:

我从here那里“借用”了代码。我只是稍微改变了一下,我要求用户为自己的选择提供一个核心用法,而不是将parallel_processes设置为4


Tags: 模块core程序amazoncountcpu线程multiprocessing
1条回答
网友
1楼 · 发布于 2024-05-09 02:25:39

计算机上并发运行的进程数不受内核数的限制。事实上,你的电脑上现在可能有数百个程序在运行,每个程序都有自己的进程。为了让它正常工作,操作系统将8个处理器中的一个临时分配给每个进程或线程-在某个时候,它可能会停止,而另一个进程将取代它。如果您想了解更多信息,请参见What is the difference between concurrent programming and parallel programming?

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

相关问题 更多 >