通过 多重处理产生的子进程是否共享程序早期创建的对象?
我有以下设置:
do_some_processing(filename):
for line in file(filename):
if line.split(',')[0] in big_lookup_object:
# something here
if __name__ == '__main__':
big_lookup_object = marshal.load('file.bin')
pool = Pool(processes=4)
print pool.map(do_some_processing, glob.glob('*.data'))
我将一些大对象加载到内存中,然后创建一个工作池,需要利用这个大对象。大对象是只读访问的,我不需要在进程之间传递对它的修改。
我的问题是: 大对象是加载到共享内存中(就像我在 unix/c 中生成一个进程那样) ,还是每个进程都加载自己的大对象副本?
更新: 进一步澄清—— big _ lookup _ object 是一个共享查找对象。我不需要把它们分开处理。我需要一份复印件。我需要分割它的工作是读取大量其他大型文件,并根据查找对象查找这些大型文件中的项目。
进一步更新: 数据库是一个很好的解决方案,memcached 可能是一个更好的解决方案,磁盘上的文件(搁置或数据库)可能更好。在这个问题中,我对内存解决方案特别感兴趣。对于最终的解决方案,我将使用 hadoop,但我想看看我是否可以有一个本地内存版本以及。