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

标签 python python-multiprocessing

我正在开发一个网页抓取脚本,为了提高其效率,我正在尝试学习如何在 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)

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

任何帮助将不胜感激

最佳答案

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

关于python - 在 Python 上使用多进程包时,值未附加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56677526/

相关文章:

python - 将 Django 模板标签 "with"与另一个模板标签的结果一起使用

python - Python 中的 UTCNow 偏移

python - 使用管道进行多重处理 - 应用程序总是在大约 5 分钟后停止

python - 当将stderr重定向到/dev/null并由multiprocessing.map_async调用时,子进程check_output抛出异常

python - 在 python 中使用多个暗网模型并行执行 GPU

Python multiprocessing+savefig 导致报错或系统死机

python - 如何重定向子进程的标准输出?

python - 如何修复 Python Gekko 最大方程长度错误

python - 使用 Connector/Python 调用带有反引号名称的 MySQL 存储过程

python - 使用 python 的多处理池和映射函数测量进度