mapreduce in python

multiprocessing pool function in Python built-in

1
2
3
4
5
6
7
8
9
10
11
12
def f(x):
return x*x
if __name__ == '__main__':
t = timer()
pool = ThreadPool(processes=1) # start 4 worker processes
result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously
print (result.get(timeout=1)) # prints "100" unless your computer is *very* slow
t.timerStart()
a = pool.map(f, range(10**6)) # prints "[0, 1, 4,..., 81]"
t.timerEnd()

여기서 결과가 이상하다. 맥북 에어의 문제인지는 확인이 필요할 듯

1
2
process=1
# 0.329390287399292 sec elapsed
1
2
process=2
0.35915374755859375 sec elapsed
1
2
process=4
0.3417470455169678 sec elapsed

https://gist.github.com/huklee/9685eba85d9cce172619bae14c9191c6

further questions

프로세스를 늘려도 더 느려지기만 하지, 전혀 빨라지지 않는다. 너무 가벼운 연산이라 그런가? 아니면 context switching 하는 데 cost가 더 비싼 연산이라 그런가? CPU가 i5라서 문제인가? 현재 너무 많은 프로그램을 쓰고 있어서 memory가 딸려서 그런 문제인가? 다른 machine에서 돌려봐야 알 것 같다.

using a pool of workers

Mini mapreduce framework for python

Pool Example

  • in this example, why is the code bad for parallel processing?

Parallel MapReduce in Python in Ten Minutes

Pydoop

Google octopy

Is there a simple Python map-reduce framework that uses the regular filesystem?

Streaming mapreduce in Python

a biginner’s guide on Hadoop by Matt. Rathbone

MIT Big data 수업에서의 Mapreduce in Python on AWS

Share Comments