Список диспетчера многопроцессорной обработки не содержит значений после повторной инициализации - PullRequest
0 голосов
/ 03 мая 2020

У меня есть такая ситуация, когда список диспетчера многопроцессорных процессов необходимо повторно инициализировать до [], чтобы сделать его пустым списком, но после этого он больше не изменяет список.

Он изменяет его локально, внутри определения не хранит эти значения после завершения процесса, а вместо этого показывает более старые значения, которые он держал до тех пор, пока не был повторно инициализирован. Почему это происходит и как это можно исправить?

import multiprocessing
import random

def mydef(my_list):
    data_list = [3,2,2,6,7,4,2,5,6,9,3,2]
    for n in data_list:
        if n == 7:
            my_list = []
        else:
            my_list.append(n)
        print(my_list)


m = multiprocessing.Manager()

m_list = m.list()
p = multiprocessing.Pool(processes=4)
p.apply_async(mydef, (m_list,))
p.close()
p.join()

print(f'\nThe final list is {m_list}')

Вывод этого

[3]
[3, 2]
[3, 2, 2]
[3, 2, 2, 6]
[]
[4]
[4, 2]
[4, 2, 5]
[4, 2, 5, 6]
[4, 2, 5, 6, 9]
[4, 2, 5, 6, 9, 3]
[4, 2, 5, 6, 9, 3, 2]

The final list is [3, 2, 2, 6]

1 Ответ

1 голос
/ 03 мая 2020

Когда вы делаете:

my_list = []

Вы отделили my_list функции от глобального my_list, попробуйте:

my_list[:] = []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...