Code:
from multiprocessing import Pool
from itertools import repeat
import timeit
import multiprocessing
def add_one(number, flag):
new_number = None
if flag=="a":
new_number = number+1
return (number, new_number)
numbers = list(range(10000000))
pool = Pool(multiprocessing.cpu_count())
for i in range(3):
print(i)
start_time = timeit.default_timer()
flag = "a"
new_numbers = pool.starmap(add_one, zip(numbers, repeat(flag)))
print('time taken: ', timeit.default_timer() - start_time)
The pool count configurations are 3, 1 and multiprocessing.cpu_count() respectively. And they time taken are below:
(base) ins-MacBook-Pro-2 graph_test % python test.py
0
time taken: 7.543301321
1
time taken: 7.8004514
2
time taken: 7.892797112
ins-MacBook-Pro-2 graph_test % python test.py
0
time taken: 11.030308790000001
1
time taken: 11.616422934
2
time taken: 11.846459496999998
ins-MacBook-Pro-2 graph_test % python test.py
0
time taken: 6.376773281
1
time taken: 6.876658618999999
2
time taken: 6.518348029
My Mac has 8 cores. It doesn't seem to speed up a lot. Is my way of using starmap correct?