在Python上使用多进程程序包时,值未附加到列表中

时间:2019-06-20 00:32:34

标签: python python-multiprocessing

我正在研究Web抓取脚本并提高其效率,正在尝试学习如何在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 个答案:

答案 0 :(得分:1)

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]]