Насколько я знаю null
луг переменная сразу, прежде чем это оставит объем, не имеет никакого значения к сборщику "мусора".
, Конечно, там случаи, где это действительно помогает. Например, когда var
не локальная переменная, а участник или статический участник. Тогда уничтожение ссылки могло бы сделать объект недостижимым и таким образом имеющим право на набор.
Другой случай, где могло бы помочь даже с локальными переменными, если функция выделяет много временной памяти для инициализации некоторых данных для последующей обработки и может выбросить все ссылки на временную память прежде, чем начать обработку:
SomeResult SomeFunction(SomeClass param) {
TempData big = new TempData(param);
IntermediateResult intermediate = big.GetIntermediateResult();
big = null; // allow GC to reclaim the memory before returning from the function
intermediate.FurtherProcessing();
return intermediate.EvenMoreProcessing();
}
В этом примере (см. код), 2 рабочих.
работа Пула как ожидалось: когда рабочий свободен, затем чтобы сделать следующее повторение.
Этот код как код в теме, кроме одной вещи: размер аргумента = 64 К.
64 К - значение по умолчанию снабжают размер буфера сокетом.
import itertools
from multiprocessing import Pool
from time import sleep
def f( x ):
print( "f()" )
sleep( 3 )
return x
def get_reader():
for x in range( 10 ):
print( "readed: ", x )
value = " " * 1024 * 64 # 64k
yield value
if __name__ == '__main__':
p = Pool( processes=2 )
data = p.imap( f, get_reader() )
p.close()
p.join()