jmquintana79
5/16/2016 - 9:06 AM

Simple multiprocessing script (parallel loop)

Simple multiprocessing / multithreading

"""
help: https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing.Pool.join	
"""

''' LIBRARIES '''
import multiprocessing
import sys

''' PARAMETERS '''
# number of task
nt = 2

''' FUNCTIONS '''
def funSquare(num):
    return num ** 2

''' BODY '''
if __name__ == '__main__':
	# build multiprocessing object
    pool = multiprocessing.Pool(processes=nt)
    # execute process
    largument = range(100)
    try:
      # map
      results = pool.map(funSquare, largument)
      
      # imap return iterator (after is possible transform to list using "list()" )
      #results = pool.imap(funSquare, largument)
      #print results.next()                       # prints first
      #print results.next()                       # prints second
      #print results.next(timeout=1)              # print after 1 second

    except Exception,e:
    	pool.terminate()
    	sys.exit(str(e))

''' FINISH '''

# when finish task, exit worker
pool.close()

print "--- The End ---"
quit()
import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()
    
def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
import threading

result = dict()

def calc_square(number, result):
    print('Square' , number * number)
    result['square'] = number * number
    
def calc_quad(number, result):
    print('Quad', number * number * number * number)
    result['quad'] = number * number * number * number
    
if __name__ == "__main__":
    number = 7
    thread1 = threading.Thread(target=calc_square, args=(number, result, ))
    thread2 = threading.Thread(target=calc_quad, args=(number, result, ))
    # Will execute both in parallel
    thread1.start()
    thread2.start()
    # Joins threads back to the parent process, which is this
    # program
    thread1.join()
    thread2.join()
    # print results
    print(result)