多处理:在进程之间共享一个大的只读对象?
我有以下设置:
do_some_processing(filename): for line in file(filename): if line.split(',')[0] in big_lookup_object: # something hereif __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可能是一个更好的解决方案,磁盘上的文件(shelve或dbm)可能更好。在这个问题中,我对内存解决方案特别感兴趣。对于最终的解决方案,我将使用hadoop,但我想看看我是否也可以拥有本地内存版本。
慕工程0101907
相关分类