let*_*tsc 18 python multiprocessing
注意:我"潜入"了multiprocessing2天前的土地.所以我的理解非常基础.
我正在编写和上传到amazon s3存储桶的应用程序.在情况下,文件的大小较大(100mb),我已经实施并使用平行上传pool从multiprocessing模块.我使用一台机器core i7,我有一个cpu_count的8.我的印象是,如果pool = Pool(process = 6)我使用6核心,文件开始上传部分,前6个部分的上传同时开始.为了看看当process大于时发生了什么cpu_count,我输入了20(意味着我想要使用20个核心).令我惊讶的是,程序开始同时上传20个零件而不是出现错误(我使用较小的部件chunk size以确保有大量零件).我不明白这种行为.我只有8核心,所以他的程序如何接受20的输入?当我说process=6,它实际上使用6个线程?这可能是20作为有效输入的唯一解释,因为可以有1000个线程.有人可以向我解释一下.
编辑:
我从这里借了'代码' .我只是略微改变了它,我要求用户选择核心用途,而不是设置parallel_processes为4
Pye*_*ras 19
在您的计算机上并发运行的进程数不受核心数量的限制.实际上,您现在可能在计算机上运行了数百个程序 - 每个程序都有自己的进程.为了使其工作,操作系统只将一个8个处理器暂时分配给每个进程或线程 - 在某些时候它可能会被停止而另一个进程将取代它.请参阅并发编程和并行编程之间的区别是什么?如果你想了解更多.
编辑:在上传示例中分配更多进程可能有意义,也可能没有意义.从磁盘读取和通过网络发送通常是python中的阻塞操作.可以暂停等待读取或发送其数据块的进程,以便另一个进程可以启动其IO.另一方面,如果进程太多,文件I/O或网络I/O将成为瓶颈,并且由于进程切换所需的额外开销,您的程序将变慢.
| 归档时间: |
|
| 查看次数: |
8128 次 |
| 最近记录: |