테스트 환경 : CentOS 7 / MariaDB 10.1.12 / Python 3.5
Python Parallel설치 폴더에 포함된 examples 폴더에 예제 소스가 있다.
그 중에 특정 input 이하의 값 중 소수인 값의 합을 구하는 예제인 sum_primes.py를 분석한다.
def isprime(n): """Returns True if n is prime and False otherwise""" if not isinstance(n, int): raise TypeError("argument passed to is_prime is not of 'int' type") if n < 2: return False if n == 2: return True max = int(math.ceil(math.sqrt(n))) i = 2 while i <= max: if n % i == 0: return False i += 1 return True |
인수로 들어오는 값이 소수인지 여부를 파악하는 함수 |
def sum_primes(n): """Calculates sum of all primes below given integer n""" return sum([x for x in range(2, n) if isprime(x)]) |
isprime 함수에서 true를 리턴하는 수의 합을 구하는 함수 |
# tuple of all parallel python servers to connect with ppservers = () #ppservers = ("127.0.0.1:60000", ) |
병렬을 위한 서버가 여러 대 일 경우(cluster) 각 서버에 대한 정보를 tuple 타입으로 입력한다. 값을 입력하지 않았을 경우 파일을 실행하는 해당 서버의 데이터가 사용된다. |
if len(sys.argv) > 1: ncpus = int(sys.argv[1]) # Creates jobserver with ncpus workers job_server = pp.Server(ncpus, ppservers=ppservers) else: # Creates jobserver with automatically detected number of workers job_server = pp.Server(ppservers=ppservers) |
sys.argv는 py파일을 실행할 때 옵션 값의 여부를 확인한다. 여기서 사용되는 옵션 값은 프로세서의 값으로 병렬로 실행할 프로세서의 수를 입력할 수 있다. |
[python@localhost examples]$ python sum_primes.py 1 Usage: python sum_primes.py [ncpus] [ncpus] - the number of workers to run in parallel, if omitted it will be set to the number of processors in the system Starting pp with 1 workers Sum of primes below 100 is 1060 Sum of primes below 100000 is 454396537 Sum of primes below 100100 is 454996777 Sum of primes below 100200 is 455898156 Sum of primes below 100300 is 456700218 Sum of primes below 100400 is 457603451 Sum of primes below 100500 is 458407033 Sum of primes below 100600 is 459412387 Sum of primes below 100700 is 460217613 Job execution statistics: job count | % of all jobs | job time sum | time per job | job server 9 | 100.00 | 2.8710 | 0.318996 | local Time elapsed since server creation 2.8785595893859863 0 active tasks, 1 cores [python@localhost examples]$ python sum_primes.py 2 Usage: python sum_primes.py [ncpus] [ncpus] - the number of workers to run in parallel, if omitted it will be set to the number of processors in the system Starting pp with 2 workers Sum of primes below 100 is 1060 Sum of primes below 100000 is 454396537 Sum of primes below 100100 is 454996777 Sum of primes below 100200 is 455898156 Sum of primes below 100300 is 456700218 Sum of primes below 100400 is 457603451 Sum of primes below 100500 is 458407033 Sum of primes below 100600 is 459412387 Sum of primes below 100700 is 460217613 Job execution statistics: job count | % of all jobs | job time sum | time per job | job server 9 | 100.00 | 3.1290 | 0.347668 | local Time elapsed since server creation 1.5888121128082275 0 active tasks, 2 cores |
inputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700) jobs = [(input, job_server.submit(sum_primes, (input, ), (isprime, ),("math", ))) for input in inputs] for input, job in jobs: print("Sum of primes below %s is %s" % (input, job())) |
각 input값에 따라서 그 값 이하의 값 중 소수에 해당하는 값의 합을 구한다.
job_server.submit(sum_primes, (input, ), (isprime, ), ("math", )) 이 부분이 병렬 프로세서로 작업을 넘기는 부분이다.
(출처 : http://www.parallelpython.com/content/view/15/30/) |
job_server.print_stats() |
병렬로 데이터를 처리하고 난 통계 값을 확인한다. |
'Programming' 카테고리의 다른 글
[Python]주식 종목 데이터 및 일별 시세 데이터 DB적재 (0) | 2016.04.22 |
---|---|
Python Parallel로 DB 데이터 읽어오기 (0) | 2016.04.18 |
Python Parallel 설치하기 (0) | 2016.04.17 |
종목의 데이터 추출하기 (0) | 2016.04.14 |
BeautifulSoup4를 이용한 웹페이지 데이터 가져오기[정리필요] (0) | 2016.04.13 |