ドッカーコンテナ内の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つの子プロセスを見ることができますが、パーセンテージが変わっています。
そして、私は4つのプロセス、使用CPUの合計額に変更した場合、その後、常に同じです:
MacまたはWindowsでDockerを実行している場合、DockerはVM内で実行されます。そのVMにさらにCPUを割り当てるには、Docker全体を設定する必要があります。 '' docker run''のオプションはそれを無効にするものではありません.VMが使用できる最大数だけ使用できるだけではありません。 –
実際にはLinux内で動作しています: – angelwally
あなたは 'print(multiprocessing.cpu_count())'を実行して質問に結果を追加できますか? – hansaplast