@python_beginnersЭта группа больше не существует

Страница 248 из 1885
tosh
06.08.2016
21:32:15
Лол, не надо

Марка это не убедит, а Зарт лишний раз нервы потратит

Марк
06.08.2016
21:33:14
Он знает об этом обсуждении

Мы уже эту тему обсасывали

Google
Zart
06.08.2016
21:40:50
реализации питона есть не только на сях, но и на шарпе и жабе как минимум, бтв

и на питоне 8)

Stanislav
06.08.2016
21:41:57
Там чуть выше

Про сокеты

⬗VLAD⌶K⬖
06.08.2016
21:42:02
а на питоне питона слабо ?

Stanislav
06.08.2016
21:42:11
а на питоне питона слабо ?
Пфф На питоне с++ изи

Sergey
06.08.2016
21:44:36
В том чатике обсуждают Python... внезапно

Stanislav
06.08.2016
21:45:52
@zartsoft а чем тебе del() не деструктор?

Марк
06.08.2016
21:47:02
Да там и обсуждали петон

Denis
06.08.2016
21:47:08
>>> class a: ... def __del__(self): ... print('del') ... >>> b = a() >>> c = b >>> del b >>> del c del

del не дестркутор, __del__ деструктор

Sergey
06.08.2016
21:47:36
Да там и обсуждали петон
Сколько помню - там обсуждали все подряд, но только не Python

Марк
06.08.2016
21:47:45
Нет.

Google
Марк
06.08.2016
21:48:38
Но бывают моменты, когда все молчат - и чатик нужно взбодрить

⬗VLAD⌶K⬖
06.08.2016
21:48:51
del не дестркутор, __del__ деструктор
он впринципе тогда и обсуждался

с ошибочкой написал

Марк
06.08.2016
21:51:22
Своей тупостью
Да ты что? Писал под рав сокеты хоть что-то?

⬗VLAD⌶K⬖
06.08.2016
21:51:29
видимо из за утечки памяти деструктор иногда не может удалить два объекта, на бэкендах это критично

Denis
06.08.2016
21:51:33
Марк
06.08.2016
21:52:31
Да мне то тоже норм, но раздражают ебланы, которые рассказывают про высокоуровневый петон

⬗VLAD⌶K⬖
06.08.2016
21:52:39
систему приходится перезагружать чтоб аварийно не завершиться=)

Denis
06.08.2016
21:52:56
sock = socket.socket() sock.bind(('127.0.0.1', self.port)) sock.listen(16) while True: conn, addr = sock.accept() data = conn.recv(65536).decode('utf-8')

Просто слушать несложно

Stanislav
06.08.2016
21:53:18
Да ты что? Писал под рав сокеты хоть что-то?
Я? - Нет. Ты без пруфов начал говорить мол говно они. Скинув при этом в стринге выхлоп, аки это мусор на самом деле. В utf-8 выхлоп, ага. Сверхразум. А потом что-то загонял нам про https протокол и байтики, попутно обсирая всех

Марк
06.08.2016
21:53:22
На eth подцепи

Stanislav
06.08.2016
21:53:41
Когда у тебя спрашивали, а что к чему, зачем ты говоришь про https, совсем упоролся?

Ты начал ебашить маты и несвязную хуету, а потом слился

Марк
06.08.2016
21:54:12
Это когда меня какой-то хуй на тупом зобанил?

Zart
06.08.2016
21:54:46
@zartsoft а чем тебе del() не деструктор?
финализатор. в отличие от деструктора не имеет отношения к операции освобождения памяти напрямую

Denis
06.08.2016
21:55:40
В джаве или шарпе есть деструкторы?

Zart
06.08.2016
21:56:29
в жабе похоже нет

Denis
06.08.2016
21:56:56
Вообще в языках с автоматической сборкой мусора могут быть деструкторы?

Google
Zart
06.08.2016
21:57:40
мммм

Stanislav
06.08.2016
21:58:20
Просто питон высокоуровневый, не думаю что надо вот так прям брать и чистить память Он наверное все линки на себя чистит?

Zart
06.08.2016
21:58:29
__del__ в цпитоне вызывается в момент, когда рефкаунт объекта достигает нуля цимес в том, что в этот момент можно создать новую ссылку на объект, увеличив счетчик и не дав объекту помереть

в багтрекере был шикарный баг на эту тему

Stanislav
06.08.2016
22:00:41
А если вручную вызывать?

Zart
06.08.2016
22:00:50
а толку

Stanislav
06.08.2016
22:01:30
"когда рефкаунт объекта достигает нуля" Я думал это автоматическое удаление когда уже не нужен объект

Zart
06.08.2016
22:02:41
http://bugs.python.org/issue10794 ыыы

Stanislav
06.08.2016
22:02:46
Тогда я не шарю Если в ручную деструктить, то должно удалять Ты же сказал про сборщик мусора

Zart
06.08.2016
22:03:00
нихуя ты вручную не можешь

только удалять ссылки

Stanislav
06.08.2016
22:03:47
Я всегда думал что можно спокойно удалить экземпляр любого класса, даже если он дальше вызвается

Zart
06.08.2016
22:03:56
ну

Denis
06.08.2016
22:03:58
Из си можно

Zart
06.08.2016
22:04:10
пока на него ссылки есть - объект жив

Из си можно
и словить некислые глюки

Stanislav
06.08.2016
22:05:22
пока на него ссылки есть - объект жив
То есть a = A() A() A().__del__() #Не удалит?! A()

Zart
06.08.2016
22:05:37
del a

⬗VLAD⌶K⬖
06.08.2016
22:05:53
можно сделать так чтоб объект самоудалялся при каком либо значении памяти?

Google
Stanislav
06.08.2016
22:05:55
Да я попутал аперкейсы

Zart
06.08.2016
22:05:57
вызов __del__ вручную бессмысленен

Stanislav
06.08.2016
22:05:57
Так че

?

Zart
06.08.2016
22:06:22
ничего ты не попутал

просто ерунду нарисовал

Stanislav
06.08.2016
22:06:57
a.__del__()

Почему нет?

Denis
06.08.2016
22:07:02
>>> class c: ... def __del__(self): ... print('del') ... >>> a = c() >>> a.__del__() del >>> a.__del__() del >>> a.__del__() del >>> a <__main__.c object at 0x7f2dc6ef5358>

Stanislav
06.08.2016
22:07:19
Лел

Admin
ERROR: S client not available

b0g3r
06.08.2016
22:07:35
лол

Stanislav
06.08.2016
22:07:47
а если def __del__(self): self.__del__()

b0g3r
06.08.2016
22:08:06
эм

Zart
06.08.2016
22:08:12
Из си можно
>>> ctypes.pythonapi.PyMem_Free <_FuncPtr object at 0x02DFC8A0> только я тебе этого не говорил

Denis
06.08.2016
22:08:18
RecursionError: maximum recursion depth exceeded

b0g3r
06.08.2016
22:08:24
вот тоже

думаю

Stanislav
06.08.2016
22:08:27
Я не шарю кароче

Zart
06.08.2016
22:09:01
__del__ НЕ УДАЛЯЕТ оно вызывается в момент удаления оно не причина, а следствие

Google
Stanislav
06.08.2016
22:11:02
А del(obj)? Не аналог?

Denis
06.08.2016
22:11:17
>>> class a: ... def __del__(self): ... print('del') ... >>> b = a() >>> c = b >>> del b >>> del c del

Zart
06.08.2016
22:13:12
a = A() что происходит в этом коде? питон создает экземпляр класса - на уровне Си это создается PyObject на хипе, рефкаунт равен 0 a = - тут питон создает в локальном фрейме имя "a", заносит в него указатель на память где находится наш PyObject, а рефкаунт инкрементирует

в итоге мы имеем переменную а, ссылающуюся на объект с рефкаунтом равным 1

Stanislav
06.08.2016
22:14:03
Это ясно

А инструкция?

Инит

Zart
06.08.2016
22:14:23
print(a) - в момент вызова, мы создаем новый фрейм, у которого есть переменные-аргументы. вызов присваивает им значения, и увеличивает рефкаунт снова

т.е. в момент вызова функции - у а счетчик будет равен 2

после того как функция вернется, фрейм освободится, со всеми именами/переменными внутри и при освобождении будет уменьшен счетчик

т.е. после того как принт отработает - у объекта будет 1

делаем теперь del a

это удаляет имя из локального фрейма, при этом рефкаунт опять декрементится и в этом случае падает в ноль

на этом этапе цпитон сразу же вызывает __del__ метод объекта

если метод не увеличит рефкаунт, то после его отработки произойдет PyMem_Free(obj) в сях

там чуток сложнее, но смысл такой, что память вернется в хип

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

но например можно сделать такое... class A(object): pass a = A() a.selfref = a

del a # упс... но внутри а есть ссылка на сам а, поэтому рефкаунт всегда будет 1

это называется циклом, поэтому питон изредка прогоняет сборку мусора, которая ищет подобные вещи

после чего принудительно разрывает ссылки и чистит объекты, вызывая их __del__

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

Страница 248 из 1885

Эта группа больше не существует Эта группа больше не существует