2016-02-15 3 views
0

У меня есть простой кодКак освободить барана в питона

import cv2 
import numpy as np 

Image = cv2.imread('blue.jpg') 

Threshold = np.zero 

s(Image.shape, np.uint8) 
cv2.threshold(Image, 121, 255, cv2.THRESH_BINARY, Threshold) 
cv2.imshow("WindowName", Threshold) 

cv2.waitKey(0) 
cv2.destroyAllWindows() 

Я хочу удалить матрицу

«Image»

из Memeory т.е. четкой памяти, чтобы сэкономить место в ram

Как я могу добиться этого Я работаю над этим кодом на raspberr у пи так

+0

Вы можете вызвать сборщик мусора, используя cg.collect(). Это не должно быть необходимо, хотя, python имеет дело с этим внутри, и если Image больше не нужен, он не будет использовать какую-либо память, насколько я понимаю. – Tobias

+0

Неиспользуемая память остается недоступной для других программ, поскольку большинство операционных систем не возвращают память из процесса, пока процесс не завершится. – chepner

+0

@TobiasR может у вас предоставить точный синтаксис, чтобы сделать так, как вы сказали –

ответ

0

Вы можете использовать

del Image[:] 
del Image 

На самом деле, вам не нужно делать, и даже не нужно заботиться об этом.

Python автоматически освобождает все объекты, на которые нет ссылок больше

см это очень качества принятого ответа how to release used memory immediately in python list?

1

del Image, скорее всего, делать то, что вы хотите, но есть некоторые особые случаи ,

  • Он не будет ничего делать, если ваше изображение все еще упоминается где-то в другом месте. Счетчик ссылок должен пойти в 0.
  • Он не будет делать ничего, прямо-таки, если есть циклическая ссылка внутри Image (он может быть освобожден в некоторый более поздний момент, или, возможно, не все)
  • Это будет работать только таким образом в cPython. Любая другая реализация может свободно обрабатывать сбор мусора другим способом. Рассмотрим предложение del.
Смежные вопросы