1

我正在研究网络抓取脚本并提高其效率,我正在尝试学习如何在 python 中使用多处理包。

我正在尝试将一组值附加到列表中并在其上循环获取多个值以获取列表列表。

这是我当前的代码,但“临时”列表在我运行后是空的,我不知道为什么

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)

换句话说,我希望我的列表包含我在函数中附加到它的值,我不知道为什么它不这样做/如何这样做。

任何帮助将不胜感激

4

1 回答 1

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

于 2019-06-20T01:03:47.760 回答