Philip Julian
Philip Julian

Reputation: 21

Loop Not Spending Value to Array in Python

When running this code it just prints out a blank array at the end:

[]

So why is it not appending either the value a or the value b?

import multiprocessing as mu

array_values=[]

def a(array):
    array.append('a')

def b(array):
    array.append('b')

def runInParallel(*fns):
    z=0
    while z<6:
        if __name__=='__main__':
            proc = []
            for fn in fns:
                p = mu.Process(target=fn,args=(array_values,))
                p.start()
                proc.append(p)
            for p in proc:
                p.join()
        z+=1

runInParallel(a,b)
print(array_values)

DESIRED FINAL OUTPUT OF FUNCTION:

['a','b','a','b','a','b','a','b','a','b','a','b']

Thanks in advance!

Upvotes: 0

Views: 19

Answers (1)

wind
wind

Reputation: 2441

The reason it doesn't word is because multiprocessing doesn't use shared memory.

You can use the following code to get your desired output (it uses threading which uses shared memory):

import threading

array_values = []


def a(array):
    array.append('a')


def b(array):
    array.append('b')


def runInParallel(*fns):
    z = 0
    while z < 6:
        if __name__ == '__main__':
            proc = []
            for fn in fns:
                p = threading.Thread(target=fn, args=(array_values,))
                p.start()
                proc.append(p)
            for p in proc:
                p.join()
        z += 1


runInParallel(a, b)
print(array_values)

Upvotes: 1

Related Questions