Can't call multiple functions in the same time with multiprocessing
Question: I'm trying to figure out how could I run the same function multiple times in
the same time. I could implement something with the multiprocessing that based
on other SO questions, but unfortunately it doesn't work as I wanted. Actually
when I run it I get something like this (the functions are running after each
osther):

    
    
    Worker1
    0 1
    1 1
    2 1
    Worker2
    0 2
    1 2
    2 2
    Worker3
    0 3
    1 3
    2 3  
    

And I would like to achieve this (or something like this):

    
    
    Worker1
    Worker2
    Worker3
    0 1
    0 2
    0 3
    1 1
    1 2
    1 3
    2 1
    2 2
    2 3
    

I'm really new to Python so it's possible that've made some trivial mistakes,
but unfortunately I can't figure out where's the problem, so I would really
appreciate if somebody could show me the right solution.

    
    
    import multiprocessing
    
    def worker():
        print ("Worker1")
        doSomething(1)
        return
    
    def worker2():
        print ("Worker2")
        doSomething(2)
        return              
    
    
    def worker3():
        print ("Worker3")
        doSomething(3)
        return    
    
    
    def doSomething (x):
        for num in range(3): 
            print (num, x)
    
    
    def runInParallel(*fns):
      proc = []
      for fn in fns:
        p = multiprocessing.Process(target=fn)
        p.start()
        proc.append(p)
      for p in proc:
        p.join()
    
    
    if __name__ == '__main__':
        runInParallel(worker, worker2, worker3)
    
     # 2. ATTEMPT - it does the same
    if __name__ == '__main__':
        p = multiprocessing.Process(target=worker)
        jobs.append(p)
        p.start()
        p2 = multiprocessing.Process(target=worker2)
        jobs.append(p2)
        p2.start()
        p3 = multiprocessing.Process(target=worker3)
        jobs.append(p3)
        p3.start()
    


Answer: What is happening, is that the background thread is finishing even before the
program can create and start the next thread, so that is why you are getting
each worker separated. To get the output you want. You can add a sleep, like
Evert mentioned:

    
    
    def doSomething (x):
        time.sleep(.01)
        for num in range(3):
            print (num, x)
    

