Python多处理是共享核心

时间:2013-06-28 23:03:15

标签: python multiprocessing

我正在使用miltiprocessing读取大量文件的大块然后处理它,但我失去了一些东西,因为有时当我启动某个进程时,其中一些共享核心。示例:具有12个核心的系统,我运行10个进程,6个是6个核心(每个核心1个),其他4个核心是2个核心(每个核心2个)......但有时,使用10个核心可以正常运行10个核心过程...

代码:

from multiprocessing import Process
[...]
process1=Process(target=run_thread, args=("./splited/"+file,result,))
process2=Process(target=run_thread, args=("./splited/"+file,result,))
process3=Process(target=run_thread, args=("./splited/"+file,result,))
process1.start() 
process2.start()
process3.start()
[...]
process1.join()
process2.join()
process3.join()

这是我的代码的一个例子,当我看到这个问题时,我正在尝试使用10。

感谢。

编辑:

  • 这台机器没有多线程,因此它有12个核心,最多有12个并行线程。
  • 有时共有两个以上的核心。
  • 瓶子的颈部不是该程序的IO,它处理文件的每一行。

1 个答案:

答案 0 :(得分:0)

我当然不是这个问题的专家,但似乎大多数现代处理器实际上都是用物理内核和虚拟内核构建的。例如,我有一个Intel Core I7,这意味着我有4个物理内核,但每个内核实际上包含2个虚拟内核,这意味着我的处理器可以并行运行8个不同的进程。

您有时提到每个核心有2个进程,因此这是由于核心虚拟化。

顺便说一下,如果您的目标是处理较小块中的大量数据,python中有一个专用于此类任务的特定模块:Pool,使用

导入
from multiprocessing import Pool

希望这对你有用, 干杯