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