1

我正在Linux上编写一个python 2.7.11程序。该程序创建12个具有multiprocessing.Pool的子流程。每个子进程都通过python的psutil库与12个cpu中的一个进行cpu关联。c函数与python的多重处理混合使用

我用multiprocessing.Event做11次过程等待子进程0

然后,在子进程0,我称之为英特尔数学核心函数库开始计算12个线程。

等待子进程会消耗任何cpu资源并影响12个线程的计算吗?

如果是这样,如何避免这种情况?或者,如何测试是否会发生?

主进程会影响12个线程的计算吗?

感谢。

+0

一般来说,没有。假设操作系统正在分配进程以分离系统中的核心/处理器,则不应该对另一个产生影响。缺乏细节,很难更具体。你能发布一些示例代码吗? – codingCat

+0

这12个子过程不会相互影响。但是,“等待”12个子进程是否会影响从子进程0启动intel线程的12个线程?只有12个cpus ....我可以尝试制定一个简化版本的代码。整个事情,包括接口python numpy和intel mkl的ctypes都很长。 – rxu

回答

1

好吧,我做了一点研究,...

首先,由于12个线程都在一个单一的过程,在其他的子过程,会发生什么以任何方式应该不会影响父进程。操作系统发生一些后台处理以处理进程间通信,这些进程通信将发生在操作系统内核的进程中,可能是父进程(进程0)。然而,这是非常小的,不应该受其他过程中的活动影响。

换句话说,一个过程中的繁重活动不应该影响另一个过程。

我会建议两件事。

1)再添加一个进程,从中启动12个线程。这会将其与OS所在的父线程分开。

2)做一些时间测试你自己的。用当前的毫秒定时器在每个线程的开始处设置一个变量。处理结束后,检查花费多长时间。然后让其他进程做一些毫无意义的浮点计算,看看它是否会影响线程的平均运行时间。

Time模块,Multiprocessing模块和Threading模块做一些研究应该有助于为您阐明该主题。