我正在研究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)
换句话说,我希望列表包含我要在函数中附加的值,但我不知道为什么不这样做/如何做。
任何帮助将不胜感激
答案 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]]