嗨,我正在写一个多进程的简单脚本。下面是我正在使用的类:
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
当我打印数据时,它是空的,即使在run()函数中改变了。你知道吗
我错过了什么?你知道吗
进程不共享它们的内存地址空间。多亏了Linux进程分叉策略,您通常会感觉子进程与父进程共享内存,但实际上它是一个副本。你知道吗
这意味着子进程中的更改不会反映在其父进程(或任何其他进程)中。你知道吗
Python多处理库为share memory between processes提供了几种机制。你知道吗
相关问题 更多 >
编程相关推荐