2017-12-27 20 views
1

ドッカーコンテナ内のPythonのマルチプロセッシングをテストしようとしていますが、プロセスが正常に作成されている(私は8つのCPUと8つのプロセスがあります) は、ここに私のコードです:Docker内のマルチプロセッシングPythonプログラム

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") 

私は--cpusのように起動したときに、複数のドッキングウィンドウのオプションを試してみましたか--cpusetが、それは常に1つだけの物理CPUを使用しています。 Docker、Python、OSの問題ですか?ここでは、実行中

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

トップです: ドッカーバージョンは1.13.1

cpu_count()の結果です。私たちはメインのプロセスと8つの子プロセスを見ることができますが、パーセンテージが変わっています。 top screenshot

そして、私は4つのプロセス、使用CPUの合計額に変更した場合、その後、常に同じです: top with 4 threads

+0

MacまたはWindowsでDockerを実行している場合、DockerはVM内で実行されます。そのVMにさらにCPUを割り当てるには、Docker全体を設定する必要があります。 '' docker run''のオプションはそれを無効にするものではありません.VMが使用できる最大数だけ使用できるだけではありません。 –

+0

実際にはLinux内で動作しています: – angelwally

+1

あなたは 'print(multiprocessing.cpu_count())'を実行して質問に結果を追加できますか? – hansaplast

答えて

関連する問題