Python类不会改变类变量

时间:2017-07-06 15:51:29

标签: python pandas oop multiprocessing

您好我正在编写一个包含多个进程的简单脚本。这是我正在使用的课程:

class WorkerProcess(multiprocessing.Process):
    def __init__(self, batch):
        multiprocessing.Process.__init__(self)
        self.batch = batch
        self.data_frame = pd.DataFrame()

    def run(self):
        temp = []
        for item in self.batch:
            temp.append(item)
        self.data_frame = pd.DataFrame(temp, columns=temp[0].keys())
        print('empty: ', self.data_frame.empty) # everything is fine

稍后我开始进程并加入它们:

    workers = []
    for i in range(max_processes):
        try:
            batch = batches_data.pop()
            workers.append(WorkerProcess(batch))
        except Exception as e:
            pass

    for worker in workers:
        worker.start()

    for worker in workers:
        worker.join()

    for worker in workers:
        print(worker.data_frame) # it is empty

当我打印data_frame时,即使在run()函数中更改了它也是空的。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

进程不共享其内存地址空间。由于Linux进程分叉策略,您通常会感觉到子进程与父进程共享内存,但实际上它是副本。

这意味着子进程中的更改不会反映在其父进程中(或任何其他进程中)。

Python多处理库为share memory between processes提供了几种机制。