#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. Спасибо! Также спасибо, что дали мне представление об общей памяти и есть ли еще большие различия между многопроцессорной обработкой и потоковой обработкой?