使用多处理和池时,如何访问全局变量?

2024-06-16 12:48:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图避免将变量冗余地传递到dataList(例如[(1, globalDict), (2, globalDict), (3, globalDict)])中,而是全局使用它们。global globalDict不是在下面的代码中这样做的解决方案。

有没有一种简单的方法可以全局访问多处理函数中的数据?

我读了下面的here

通讯费用高昂。 与线程之间的通信相比,进程之间的数据交换要昂贵得多。在Python中,数据在通过管道传输之前被pickle为二进制格式。因此,当任务很小时,通信开销可能非常大。为了降低额外成本,最好将任务分块分配。”

我不确定这是否适用于这里,但无论如何我想简化数据访问。

def MPfunction(data):
    global globalDict

    data += 1

    # use globalDict

    return data

if __name__ == '__main__':

    pool = mp.Pool(mp.cpu_count())

    try:
        globalDict = {'data':1}

        dataList = [0, 1, 2, 3]
        data = pool.map(MPfunction, dataList, chunksize=10)

    finally:
        pool.close()
        pool.join()
        pool.terminate()

Tags: 数据方法代码dataheremp解决方案全局