0

我正在使用 miltiprocessing 读取大量文件的大量块然后对其进行处理,但我失去了一些东西,因为有时当我启动某些进程时,其中一些共享一个核心。示例:具有 12 个内核的系统,我运行 10 个进程,其中 6 个是 en 6 个内核(每个内核一个),其他 4 个是 en 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个并行线程。
  • 有时有超过 2 个共享一个核心。
  • 瓶颈不是这个程序上的 IO,它处理文件的每一行。
4

1 回答 1

0

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

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

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

from multiprocessing import Pool

希望这对你有用,干杯

于 2013-06-28T23:29:12.603 回答