Создаются ли дочерние процессы через multiprocessing общие объекты, созданные ранее в программе?
У меня есть следующая настройка:
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 может быть лучшим решением, а файл на диске (полке или dbm) может быть еще лучше. В этом вопросе меня особенно интересовало решение в памяти. Для окончательного решения я буду использовать hadoop, но я хотел бы посмотреть, могу ли я иметь локальную версию в памяти.