This is a follow up question to: Python: How can I run python functions in parallel?
Minimal Working Example:
'''
Created on 06.05.2015
https://stackoverflow.com/questions/7207309/python-how-can-i-run-python-functions-in-parallel
'''
from multiprocessing import Process
import time
def runInParallel(*fns):
proc = []
for fn in fns:
p = Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()
def func1():
s=time.time()
print 'func1: starting', s
for i in xrange(1000000000):
if i==i:
pass
e = time.time()
print 'func1: finishing', e
print 'duration', e-s
if __name__ == '__main__':
s =time.time()
runInParallel(func1, func1, func1, func1, func1)
print time.time()-s
Which leeds to this (and it's exactly what i want):
func1: starting 1430920678.09
func1: starting 1430920678.53
func1: starting 1430920679.02
func1: starting 1430920679.57
func1: starting 1430920680.55
func1: finishing 1430920729.68
duration 51.1449999809
func1: finishing 1430920729.78
duration 51.6889998913
func1: finishing 1430920730.69
duration 51.1239998341
func1: finishing 1430920748.64
duration 69.6180000305
func1: finishing 1430920749.25
duration 68.7009999752
71.5629999638
However, my function has quite a load of arguments, so i tested it like this:
-> func1(a) now gets an argument passed.
'''
Created on 06.05.2015
https://stackoverflow.com/questions/7207309/python-how-can-i-run-python-functions-in-parallel
'''
from multiprocessing import Process
import time
def runInParallel(*fns):
proc = []
for fn in fns:
p = Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()
def func1(a):
s=time.time()
print 'func1: starting', s
for i in xrange(a):
if i==i:
pass
e = time.time()
print 'func1: finishing', e
print 'duration', e-s
if __name__ == '__main__':
s =time.time()
g=s
runInParallel(func1(1000000000), func1(1000000000),
func1(1000000000), func1(1000000000),
func1(1000000000))
print time.time()-s
So now this happens:
func1: starting 1430921299.08
func1: finishing 1430921327.84
duration 28.760999918
func1: starting 1430921327.84
func1: finishing 1430921357.68
duration 29.8410000801
func1: starting 1430921357.68
func1: finishing 1430921387.14
duration 29.4619998932
func1: starting 1430921387.14
func1: finishing 1430921416.52
duration 29.3849999905
func1: starting 1430921416.52
func1: finishing 1430921447.39
duration 30.864000082
151.392999887
The process is now sequential and no longer parallel, and i don't get why! What am I missing and doing wrong?
EDIT: Additionally, how would an example look like, whre a few arguments are positional and others which are optional?