'Trying multiprocessing but the program dies before it even starts

I have this code:

from multiprocessing import Process, cpu_count

def readplayerinfo():
    y=0
    Gameon = True
    while Gameon:
        y+=1
        print('y',y)
        if y == 50:
            Gameon = False
        
    return None

def main():

    islooping = True

    x=0
    a = Process(target=readplayerinfo,args = ())
    a.start()
    while islooping:
        print('x',x)
        x+=1
        if x == 100:
            islooping = False
    a.join()



if __name__ == '__main__':
    main()

The goal of the program is to make two process, do a while loop in each process and print the y and x simultaneously(fastest one gets printed first obviously).

But when I run it, the terminal only shows 'x 0' and it freezes

I did my best to research, but it's the first time I try multiprocessing.

So my question is this How do I make this multiprocessing work?

Edit: I have been told that IDLE ide has problem with mutliprocessing so i switched to using the terminal in ubuntu 20.04 and then my output was only the y being printed, then it froze and no x was ever printed. Plus, i did print(cpu_count()) and it returned me 4 so I don't think it's a hardware problem



Solution 1:[1]

I tried a lot of things, but the only way to get x and y to print alternatively is to do 2 different processes. The x and y will print one after the other, but there will be a slight delay between them, because of the overhead of starting a processe.Plus, I don't know why, but IDLE doesn't work well with multiprocessing. So you need to find another IDE or do it in the terminal with 'python3 (nameofthefile).py'.

from multiprocessing import Process, cpu_count

def secondprocess():
    y=0
    Gameon = True
    while Gameon:
        y+=1
        print('y',y)
        if y == 50000:
            Gameon = False
        
    return None

def firstprocess():
    x = 0
    islooping = True
    while islooping:
        x+=1
        print('x',x)
        if x == 50000:
            islooping = False
            
def main():

    a = Process(target=secondprocess,args = ())
    b = Process(target=firstprocess,args = ())
    a.start()
    b.start()

    a.join()
    b.join()


if __name__ == '__main__':
    main()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 solarchick