2017-12-27 2 views
1

도커 컨테이너 내부에서 파이썬에 대한 다중 처리를 테스트하려고하지만 프로세스가 성공적으로 작성된 경우 (8 개의 CPU와 8 개의 프로세스가 작성된 경우)에도 항상 하나의 실제 CPU 만 사용합니다. 다음은 내 코드입니다 :Docker 내부의 다중 처리 파이썬 프로그램

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 개 프로세스로 변경하는 경우 top screenshot

그리고는, 사용 된 CPU의 총량은 항상 동일합니다 : top with 4 threads

+0

Mac 또는 Windows에서 Docker를 실행하는 경우 Docker는 VM 내부에서 실행됩니다. 해당 VM에 더 많은 CPU를 할당하려면 전체적으로 Docker를 구성해야합니다. ''docker run''에 대한 옵션은 그것을 무시하지 않고, VM이 사용할 수있는만큼 사용할 수 없습니다. –

+0

실제로 리눅스에서 실행 중입니다 : ( – angelwally

+1

) print (multiprocessing.cpu_count())를 수행하고 질문에 결과를 추가 할 수 있습니까? – hansaplast

답변