繁体   English   中英

Python多处理共享内核

[英]Python multiprocessing is sharing cores

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

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

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

顺便说一句,如果您打算以较小的块来处理大量数据,则python中有一个专门用于以下任务的特定模块: Pool ,使用

from multiprocessing import Pool

希望这对您有用,干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM