
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

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

Google

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

⬗VLAD⌶K⬖
06.08.2016
21:48:51
с ошибочкой написал

Stanislav
06.08.2016
21:50:52

Марк
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

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

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

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

Google

Stanislav
06.08.2016
21:57:14

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

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__
в питоне есть возможность делать ссылки на объекты, без увеличения рефкаунта, это так называемые слабые ссылки
Эта группа больше не существует