In [1]:
import os, sys
import numpy as np
import time
from multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool
In [2]:
def get_a_thing(seed=None):
"""Returns a number after a random amount of time
"""
np.random.seed()
t = np.random.random()*3
time.sleep(t)
return t
def get_n_things(seed=None):
"""Returns a random number of random things
"""
n = int(np.random.random()*5)
return [get_a_thing() for i in range(n)]
def build_list(N=6, msg='hello.'):
start = time.time()
N = int(N)
l = []
while len(l) < N:
l += (get_n_things())
end = time.time()
print('Built list of {} things on pid {}. Took {:.3f}s. {}'.format(N, os.getpid(),
end-start,
msg))
sys.stdout.flush()
return l[:N]
In [3]:
build_list(4)
Out[3]:
In [31]:
from functools import partial
import itertools
def build_list_wrapper(args):
return build_list(*args)
def run_parallel(N=8, threads=False):
start = time.time()
if threads:
pool = ThreadPool(4)
else:
pool = Pool(4)
start = time.time()
f = partial(build_list, msg='yo')
results = pool.map(f, range(N))
end = time.time()
print('{:.3} s'.format(end-start))
pool.terminate()
return results
In [32]:
run_parallel(threads=True)
Out[32]:
In [ ]: