Andrew
Ребята подскажите ловлю ValueError: list.remove(x): x not in list while len(spisok) > 0: print('Длина списка:', len(spisok)) with Pool(25) as p: p.map(download_html, spisok) def download_html(url): spisok.remove(url) print('Скачал и удалил', url) в чем проблема?
Артем
Народ подскажите а у jinja2 рендеринг файла асинхронный? Я чет не могу понять из доков (( Уже и в код залез а там блокирующий open()
Макс
url нев в списке)
Alex
синхронный
Andrew
url нев в списке)
а как его может не быть в списке если он был передан в функцию
Артем
синхронный
Вот блин ((( а тогда какой профит использования в асинхронных фреймворках?
Aram
хеш не говорит, что объект неизменяем. хеш говорит, что объект должен быть уникален
Почему лист тогда не хэшируемый, он ведь тоже может быть уникальный?
Alex
Вот блин ((( а тогда какой профит использования в асинхронных фреймворках?
а в чем собственно проблема? рендеринг шаблона в основном CPU bound за исключением его чтения из файла и записи в кеш.
Alex
Однако файловый IO не может быть асинхронным (на самом деле может).
Макс
Почему лист тогда не хэшируемый, он ведь тоже может быть уникальный?
ибо его уникальность напрямую зависит от содержимого, а содержимое можно менять.
🍁 Jaŭhien
Вот есть асинхронная жинжа для аиохттп https://github.com/aio-libs/aiohttp-jinja2
Alex
Поэтому если рендеринг шаблона у тебя становится узким местом - выноси ее в отдельный поток.
🍁 Jaŭhien
Не смотрел что именно там асинхронное
Alex
Не смотрел что именно там асинхронное
Ну скорее всего как и aiofiles, просто враппер над отдельным потоком.
Артем
Вот есть асинхронная жинжа для аиохттп https://github.com/aio-libs/aiohttp-jinja2
видел - но не пробовал к санек прикручивать и возможно ли это ))) А тот что предлагает сам санек юзать он синхронный
Alex
Почему лист тогда не хэшируемый, он ведь тоже может быть уникальный?
не уникальный, а неизменяемый. чтобы гарантировать что хеш объекта не меняется в течение времени его жизни, он должен быть неизменяемым.
🍁 Jaŭhien
Ну скорее всего как и aiofiles, просто враппер над отдельным потоком.
В общем, глянул, там один файл, асинхронщины нет, просто интерфейс к аиохттп
🍁 Jaŭhien
Ну оно и понятно
Alex
дык, а что ты ожидал. файлового асинхронного IO в общем случае не бывает.
Alex
(под линуксами, если не брать во внимание AIO)
Alex
который поддерживается в очень ограниченном количестве случаев.
Alex
смущает
если ты запускаешь Pool.map(), нафига вообще удалять из списка урлы?
Aram
не уникальный, а неизменяемый. чтобы гарантировать что хеш объекта не меняется в течение времени его жизни, он должен быть неизменяемым.
А почему хэш должен меняться, если объект остаётся в памяти на своём месте просто скажем в список добавили новый элемент?
Alex
А почему хэш должен меняться, если объект остаётся в памяти на своём месте просто скажем в список добавили новый элемент?
А представь себе что у тебя твой список является ключем у дикта… ты добавил элемент, хеш изменился.
Aram
Скажите, вы понимаете, зачем хеши вообще нужны?)
Чтобы было уникальное соответствие между ключом и значением
Alex
при чем тут адрес объекта в памяти к его хешу?
Alex
Чтобы было уникальное соответствие между ключом и значением
нет, хеши не могут быть уникальными по определению.
Alex
предлагаю тебе забуриться в любую книжку по Алгоритмам и Структурам данных и наконец-то изучить как работает хеш-таблица и зачем там нужны хеши.
Andrey
Чтобы было уникальное соответствие между ключом и значением
Хеш нужен, чтобы можно было по _значению_ объекта "примерно" понять, есть он в хеш-таблице (dict, set) или нет. Примерно — см. коллизии. Проблема с изменяемыми (mutable) типами вроде списка в том, что после изменения этот список будет лежать не в той ячейке хеш-таблицы.
Andrey
Для кастомных типов по умолчанию есть максимально тупая реализация хешей — хеш это условно адрес в памяти, сравнение всегда возвращает False.
Andrey
> сравнение всегда возвращает False. шта?
А, неправильно. Сравнение сравнивает адреса, т.е. сам с собой объект будет сравниваться на True.
Andrey
нет
Я про вот такое: >>> class User: ... def __init__(self, name): ... self.name = name ... >>> User('abc') == User('abc') False
Alex
А, неправильно. Сравнение сравнивает адреса, т.е. сам с собой объект будет сравниваться на True.
нет, если у кастомного типа не реализован оператор сравнения, то сравниваются id() объектов.
Alex
для CPython id() возвращает адрес объекта в памяти, но это особенность реализации.
Tishka17
Вы в двух чатах одновременно это обсуждаете?
Aram
Хеш это просто int
Все равно не понял почему кастомный объект хэшируемый(( ведь здесь прямая аналогия с листом если среди атрибутов этого объекта есть лист, который нехэшируемый, то и объект должен быть нехэшируемый?
Denis
Приветствую. У gunicorn можно выбрать асинхронный тип воркеров -k gevent, но я наблюдаю следующую картину: при 1 воркере если отправить один запрос, который выполняется довольно долнго и следом отправить второй (лёгкий), то второй ждёт пока первый не отработает. Куда смотреть или я неправильно понимаю назначение gevent воркеров?
Tishka17
Все равно не понял почему кастомный объект хэшируемый(( ведь здесь прямая аналогия с листом если среди атрибутов этого объекта есть лист, который нехэшируемый, то и объект должен быть нехэшируемый?
Потому что решили по дефолту не запрещать для произвольных объектов хэш ибо хз что там. Например, если если список в одном из полей, не факт что он должен участвовать в хэше. А вот просто со списком все однозначно
В нейронках шарит кто?
Aram
Потому что решили по дефолту не запрещать для произвольных объектов хэш ибо хз что там. Например, если если список в одном из полей, не факт что он должен участвовать в хэше. А вот просто со списком все однозначно
То есть получается, что если бы допустили что листы были бы хэшируемы постоянно возникали бы коллизии? А с объектами не все однозначно, потому что даже если в двух объектах одного класса один и тот же лист в качестве одного и того же атрибута, остальные атрибуты этих экземпляров могут быть разными и соответсвенно это будут разные(уникальные) объекты, значит коллизий возникать не будет, так?
Tishka17
Да не в коллизиях дело
Tishka17
А в том, что обьект ты положил с одним хэшем в словарь, а потом у него другой оказался и хз как будет словарь работать
Tishka17
В списке все элементы равноправны и по логике все должны участвовать в хэше. А в объекте бабушка надвое сказала
punkgendos
сорян за оффтоп, YouTube API знает кто? как узнать место ролика в тренде?
Артем
народ кто работал с docker SDK? Как туда sudo пропихнуть? )))
Ssi
народ кто работал с docker SDK? Как туда sudo пропихнуть? )))
А зачем? Никогда не запускал докер из-под sudo
Артем
А зачем? Никогда не запускал докер из-под sudo
хм, в доках написано что только из под судо работает )))
Ssi
Или это демон?
Артем
Но наверное я что то не то прочитал (((
Ssi
dockerd?
Артем
о как а ларчик то просто открывался - нужно просто пользователя засунуть в группу docker
Артем
Спасибо за отзыв - разобрался ))
Ssi
:)
🍁 Jaŭhien
Клиенту тоже судо нужен, либо надо юзера добавить в группу docker
🍁 Jaŭhien
Хех
Артем
спасибо!
Sayid
Если после запроса session.post(url, data=data) меня перенаправляет на другой сайт, можно как-то получить ссылку этого сайта?
Sayid
То есть писать r =session.post(...) и в r искать?
🍁 Jaŭhien
Ну
🍁 Jaŭhien
Глянь что там в dir(r)
Bulat
как проверить являеться ли [] пустым ? is not че
Bulat
?
Sayid
bool([] ) выдаст false