Сборка мусора Python

Может быть, я что-то пропустил, но exec не работал как асинхронный для меня в среде Windows, который я использовал в окнах, и он работал как charm;)

$script_exec = "c:/php/php.exe c:/path/my_ascyn_script.php";

pclose(popen("start /B ". $script_exec, "r"));
37
задан utdiscant 23 June 2009 в 21:59
поделиться

5 ответов

Вы не предоставили достаточно информации - это зависит от специфики создаваемого вами объекта и того, что еще вы делаете с ним в цикле. Если объект не создает циклических ссылок, он должен быть освобожден на следующей итерации. Например, код

for x in range(100000):
  obj = " " * 10000000

не приведет к постоянному увеличению выделения памяти.

20
ответ дан 27 November 2019 в 03:34
поделиться

Это старая ошибка, которая была исправлена ​​для некоторых типов в python 2.5. Дело в том, что python не очень хорошо собирал такие вещи, как пустые списки / словари / tupes / floats / ints. В python 2.5 это было исправлено ... в основном. Однако числа с плавающей запятой и целые числа - это синглтоны для сравнений, поэтому после создания одного из них он остается до тех пор, пока жив интерпретатор. Меня укусило это худшее, когда я имел дело с большим количеством поплавков, так как они имеют неприятную привычку быть уникальными. Это было охарактеризовано для python 2.4 и обновлено о том, что он складывается в python 2.5

Лучший способ, который я нашел, - это перейти на python 2.5 или новее, чтобы позаботиться о списках / словари / вопрос кортежей. Для чисел единственное решение - не допускать попадания большого количества чисел в Python. Я' я сделал это со своей собственной оболочкой для объекта C ++, но у меня сложилось впечатление, что numpy.array даст аналогичные результаты.

Как почтовый скрипт, я понятия не имею, что с этим произошло в python 3, но я подозрительно, что числа все еще являются частью сингла. Так что утечка памяти на самом деле является особенностью языка.

13
ответ дан 27 November 2019 в 03:34
поделиться

Если вы создаете циклические ссылки, ваши объекты не будут немедленно освобождены, а придется ждать, пока запустится цикл сборки мусора.

Вы можете использовать weakref для решения этой проблемы или явно удалите объекты после использования.

7
ответ дан 27 November 2019 в 03:34
поделиться

Вот одна вещь, которую вы можете сделать в REPL, чтобы принудительно разыменовать переменную:

>>> x = 5
>>> x
5
>>> del x
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
1
ответ дан 27 November 2019 в 03:34
поделиться

Я нашел этот пост на форуме, где люди пытаются почти то же самое: http://nuigroup.com/forums/viewthread/3531/#44302

-121--1608009-

Вы можете загрузить vPass (голосовой пароль) из http://www.basic-signalprocessing.com .

Для (vText) voice to text я могу отправить файл vText.jar на ваш адрес электронной почты. Pls notify enquiry@basic-signalprocessing.com

Компоненты разработаны для языка Java и .Net. Период распознавания составляет 5 секунд. VPass хорошо протестирован vText не является, все еще новым, поэтому еще не упакован.

с учетом, Андреас

-121--2970812-

Я обнаружил, что в моем случае (с Python 2.5.1), с циклическими ссылками на классы, которые имеют методы __ del __ () , не только не происходит своевременный вывоз мусора, __ del __ () методы моих объектов никогда не получали Поэтому я использовал weakref , чтобы разорвать круговые ссылки, и все было хорошо.

Кудос Майлзу, который предоставил всю информацию в своих комментариях, чтобы я сложил это воедино.

3
ответ дан 27 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: