Skip to content

Instantly share code, notes, and snippets.

@temoto
Created April 24, 2015 04:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save temoto/af663106a3da414359fa to your computer and use it in GitHub Desktop.
Save temoto/af663106a3da414359fa to your computer and use it in GitHub Desktop.
import multiprocessing as mp
import sys
import resource
def memory():
self = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
children = resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss
return self + children
def debug(prefix):
msg = '{}: {}'.format(prefix, memory())
sys.stderr.write(msg + '\n')
def process(data):
return data.upper()
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--pool_first', action='store_true')
parser.add_argument('--size', type=int, default=1)
args = parser.parse_args()
create_data = lambda size: '.' * args.size
# one worker process for faster and cleaner results
create_pool = lambda: mp.Pool(1)
if args.pool_first:
debug('start')
p = create_pool()
debug('pool created')
data = create_data()
debug('data created')
else:
debug('start')
data = create_data()
debug('data created')
p = create_pool()
debug('pool created')
p.map(process, data)
debug('processed')
# save references to avoid garbage collector affect results
_ = p
_ = data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment