嗨,我正在编写一个包含多个进程的简单脚本。这是我正在使用的类:
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((函数中进行了更改,它也是空的。
我错过了什么?
进程不共享其内存地址空间。由于 Linux 进程分叉策略,您通常会觉得子进程与父进程共享其内存,但实际上它是一个副本。
这意味着子流程中的更改不会反映在其父流程(或任何其他流程(中。
Python 多处理库提供了几种机制来在进程之间共享内存。