Python 3.6 - Многопроцессорная карта с возможностью итераций по списку, содержащая списки, определенные в основном контексте - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь выяснить, обращаются ли рабочие к списку объектов, которые я включаю в свое понимание списка, итеративное для функции pool.map, непосредственно или работники получают копии списков.

Я использую DEAP и успешно внедрил многопроцессорность. Первоначально я считывал файлы CSV в массивы и отправлял массивы работникам, но тогда каждому работнику приходилось создавать собственный список объектов. Я подумал, что если я смогу создать объекты один раз и отправить их копии, это может ускорить процесс.

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

Я создаю списки, читая данные из файлов CSV и добавляя объекты в мои списки, определенные в основном контексте.

Пример:

if __name__ == '__main__':

    start_time = time.time()

    pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
    toolbox.register("map", pool.map)

    _jobsArray = []
    with open('.\Datasets\Jobs.csv') as csvfile:
        readCSV = csv.reader(csvfile, delimiter=',')
        next(readCSV)  # Skip the header
        for row in readCSV:
            Job(row[0], literal_eval(row[1]), literal_eval(row[3]), literal_eval(row[2]), literal_eval(row[4])))

Позже я использую понимание списка для создания необходимой итерации:

 fitnesses = toolbox.map(toolbox.evaluate, [(indiv, _jobsArray, _machinesArray) for indiv in invalid_ind])

Затем я распаковываю кортеж в своей функции оценки и использую объекты.

Я использовал распечатки на разных этапах, чтобы попытаться определить состояния списков. На основании печати сразу после распаковки кортежа, списки находятся в их состоянии по умолчанию в начале оценки. В конце оценки они оба отличаются от исходного состояния и в достаточном количестве случаев различаются между членами населения (ожидается несколько идентичных лиц).

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

...