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
