3

I'm trying to run 2 processes simultaneously, but only the first one runs

def add():
    while True:
        print (1)
        time.sleep(3)

def sud():
     while True:
        print(0)
        time.sleep(3)

p1 = multiprocessing.Process(target=add) 
p1.run()
p = multiprocessing.Process(target=sud)
p.run()
user2357112
  • 260,549
  • 28
  • 431
  • 505
aja
  • 97
  • 2
  • 2
  • 9
  • 2
    Oh hey, it's this bug again. The `start`/`run` name choices have caused so many headaches over the years. – user2357112 Aug 31 '16 at 20:41
  • @user2357112 If it's common, surely there's a dupe? – jpmc26 Aug 31 '16 at 21:16
  • @jpmc26: Likely, but I didn't find one in a quick search for `Python multiprocessing start run`. – user2357112 Aug 31 '16 at 21:18
  • @user2357112 Found one that has an answer describing the difference: [Python multiprocessing.Process: start with local variable](http://stackoverflow.com/questions/32703083/python-multiprocessing-process-start-with-local-variable). Or maybe we need a better written/flushed out one? – jpmc26 Aug 31 '16 at 21:19

2 Answers2

6

Below will work for sure but try to run this as a module.Don't try in console or Jupiter notebook as notebook will never satisfy the condition "if name == 'main'". Save the entire code in a file say process.py and run it from command prompt. Edit - It's working fine. Just now I tried - enter image description here

import multiprocessing
import time
def add():
    while True:
        print (1)
        time.sleep(3)

def sud():
     while True:
        print(0)
        time.sleep(3)
if __name__ == '__main__':
    p1 = multiprocessing.Process(name='p1', target=add)
    p = multiprocessing.Process(name='p', target=sud)
    p1.start()
    p.start()
Brij
  • 109
  • 3
3

The method you're looking for is start, not run. start starts the process and calls run to perform the work in the new process; if you call run, you run the work in the calling process instead of a new process.

user2357112
  • 260,549
  • 28
  • 431
  • 505