Docker中的多进程python程序

我试图testingdocker容器内的python多处理,但即使如果进程成功创build(我有8个CPU和8个进程创build),他们总是只有一个物理CPU。 这是我的代码:

from sklearn.externals.joblib.parallel import Parallel, delayed import multiprocessing import pandas import numpy from scipy.stats import linregress import random import logging def applyParallel(dfGrouped, func): retLst = Parallel(n_jobs=multiprocessing.cpu_count())(delayed(func)(group) for name, group in dfGrouped) return pandas.concat(retLst) def compute_regression(df): result = {} (slope,intercept,rvalue,pvalue,stderr) = linregress(df.date,df.value) result["slope"] = [slope] result["intercept"] = [intercept] return pandas.DataFrame(result) if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') logging.info("start") random_list = [] for i in range(1,10000): for j in range(1,100): random_list.append({"id":i,"date":j,"value":random.random()}) df = pandas.DataFrame(random_list) df = applyParallel(df.groupby('id'), compute_regression) logging.info("end") 

当我启动时,我尝试了多个docker选项,如–cpus或–cpuset,但它始终只使用1个物理CPU。 在Docker,Python,操作系统中是否是一个问题? Docker版本是1.13.1

cpu_count()的结果:

 >>> import multiprocessing >>> multiprocessing.cpu_count() 8 

运行期间,这里是顶部。 我们可以看到主stream程和8个subprocess,但是我发现这个百分比很奇怪。 顶部的截图

然后,如果我更改为4个进程,总的CPU使用量总是相同的: 顶部有4个线程

multiprocessing.cpu_count()在我的机器上给出2而不传递--cpu选项

头顶到https://docs.docker.com/engine/admin/resource_constraints/#cpu关于docker集装箱资源的更多信息