Значения, не добавляемые в список при использовании пакета с несколькими процессами в Python - PullRequest
1 голос
/ 20 июня 2019

Я работаю над сценарием очистки веб-страниц и, чтобы повысить его эффективность, пытаюсь научиться использовать пакет многопроцессорной обработки в python.

Я пытаюсь добавить набор значений в список и зациклить его на нескольких значениях, чтобы получить список списков.

Вот мой текущий код, но после его запуска список «temp» пуст, и я не могу понять, почему

temp= []

def square(number):
    global temp
    x = number * number
    print(x)
    temp.append([number,x])



numbers = [1,2,3,4]

processes = []


for number in numbers:
    process = Process(target=square, args=(number,))
    processes.append(process)


    process.start()

for proc in processes:
    proc.join()


print (temp)

Другими словами, я хочу, чтобы мой списоксодержат значения, которые я добавляю к ней в функции, и я не могу понять, почему она этого не делает / как это сделать.

Любая помощь будет принята с благодарностью

1 Ответ

1 голос
/ 20 июня 2019

Process не является хорошим кандидатом на то, что вы пытаетесь сделать.Вы можете сделать это намного лучше с Pool.Таким образом, вы избежите доступа к этой глобальной переменной из разных процессов.

from multiprocessing import Pool


def square(num):
    x = num * num
    return [num, x]


numbers = [1, 2, 3, 4]

pool = Pool()
results = pool.map(square, numbers)

print(results)

Вывод: [[1, 1], [2, 4], [3, 9], [4, 16]]

...