Цикл, не тратящий значение на массив в Python

#python #multiprocessing

#python #многопроцессорная обработка

Вопрос:

При запуске этого кода он просто выводит пустой массив в конце:

 []
  

Итак, почему он не добавляет ни значение a, ни значение 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)
  

ЖЕЛАЕМЫЙ КОНЕЧНЫЙ РЕЗУЛЬТАТ ФУНКЦИИ:

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

Заранее спасибо!

Ответ №1:

Причина, по которой это не слово, заключается в том, что multiprocessing не использует общую память.

Вы можете использовать следующий код, чтобы получить желаемый результат (он использует threading , который использует общую память):

 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)
  

Комментарии:

1. Спасибо! Также спасибо, что дали мне представление об общей памяти и есть ли еще большие различия между многопроцессорной обработкой и потоковой обработкой?