Python MultiProcessing更新全局变量

时间:2016-03-25 15:47:42

标签: python python-multiprocessing

我遇到了一个问题,我尝试使用多处理启动多个进程,并尝试让每个进程更新一个全局dict对象。

代码是:

import multiprocessing

jobs = []

master_dict = {}

def worker_function(list1, id):
    master_dict[str(id)] = {}

    for i in list1:
        #
        # using pymssql here to get a cursor of rows from a SELECT query
        #
        master_dict[str(id)][i] = []

        for row in cursor:
            master_dict[str(id)][i].append(row)

    return

def multi_function():
    for i in list2:
        my_proc = multiprocessing.Process(name='multi_process', target=worker_function, kwargs={'list1': session['something'], 'id': i})

        jobs.append(my_proc)
        my_proc.start()

    for job in jobs:
        job.join()
return master_dict{}

当我打印沿途附加的内容时,我确实看到数据正在添加到master_dict中,但是一旦它返回,它只是{}。

这是多个进程尝试更新同一个变量的问题吗?我知道多线程这是一个问题,为线程安全。

任何建议都会非常有用!

由于

1 个答案:

答案 0 :(得分:3)

您无法在此类流程之间共享状态。 multiprocessing模块包含number of different approaches来执行此操作。