I have several functions that need to run in parallel and online. Meaning, starting one function, and before it finishes starting another one. I found this SO question that works if I want to start the functions simultaneously (and not online):
from multiprocessing import Process
def func1():
print 'func1: starting'
for i in range(10000000): pass
print 'func1: finishing'
def func2():
print 'func2: starting'
for i in range(10000000): pass
print 'func2: finishing'
if __name__ == '__main__':
p1 = Process(target=func1)
p1.start()
p2 = Process(target=func2)
p2.start()
p1.join()
p2.join()
I tried to modify it for the functions to run online:
from multiprocessing import Process
def func1():
print ('func1: starting')
for i in range(300000000): pass
print ('func1: finishing')
def func2():
print ('func2: starting')
for i in range(300000000): pass
print ('func2: finishing')
c = 0
if c < 1:
p1 = Process(target=func1)
p1.start()
p1.join()
c = 20
if c > 19:
p2 = Process(target=func2)
p2.start()
p2.join()
However, it seems like func1
must finish first before func2
starts
Update:
Thanks to @Alexey Larionov I think I solved it. I commented out the .join()
parts and now the functions run online:
from multiprocessing import Process
def func1():
print ('func1: starting')
for i in range(10000000): pass
print ('func1: finishing')
def func2():
print ('func2: starting')
for i in range(100): pass
print ('func2: finishing')
def func3():
print ('\nfunc3: starting')
for i in range(100000000): pass
print ('func3: finishing')
c = 0
if c < 1:
p1 = Process(target=func1)
p1.start()
#p1.join()
c = 20
if c > 19:
p2 = Process(target=func2)
p2.start()
#p2.join()
c = 100
if c > 99:
p3 = Process(target=func3)
p3.start()
>>> func1: starting
func2: starting
func2: finishing
func3: starting
func1: finishing
func3: finishing