Используя python multiprocessing
, следующий надуманный пример работает с минимальными требованиями к памяти:
import multiprocessing
# completely_unrelated_array = range(2**25)
def foo(x):
for x in xrange(2**28):pass
print x**2
P = multiprocessing.Pool()
for x in range(8):
multiprocessing.Process(target=foo, args=(x,)).start()
Раскомментируйте создание completely_unrelated_array
, и вы обнаружите, что каждый порожденный процесс выделяет память для копии completely_unrelated_array
! Это минимальный пример гораздо более крупного проекта, который я не могу понять, как обходиться; многопроцессорность, похоже, делает копию всего глобального. Мне не нужен объект общей памяти, мне просто нужно передать x
и обработать его без служебных программ памяти всей программы.
Боковое наблюдение: интересно то, что print id(completely_unrelated_array)
внутри foo
дает одно и то же значение, предполагая, что каким-то образом это могут быть не копии...