🤟😜🍺🎁🎉🍻🎂
Поздравляю всех 3Dшников с проф-праздником!
PS. А еще на канале юбилейный пост под номером 300! 😎
#offtop
Поздравляю всех 3Dшников с проф-праздником!
PS. А еще на канале юбилейный пост под номером 300! 😎
#offtop
😋 Заметка от читателя @nencoru
Как смержить несколько файлов с отсортированными строками в один файл, тоже отсортированный?
🔸 Исходный файл:
▫️ в одной строке находится одна запись
▫️ запись содержит предсказуемое поле с некими данными для сортировки. Например, логи с указанием времени.
▫️ все записи в файле отсортированы по этому полю
🔸 Задача:
Смержить несколько таких файлов так, чтобы в финальном файле все записи были также отсортированы.
🔸 Решение 1:
Предположим, у меня JSON-логи
Это означает, что вам потребуется оперативной памяти 5*len(files) Gb.
И уже не каждый компьютер сможет смержить 3-4 таких файла. А если их 100?
fileinput может помочь написать более красивый код, но с памятью не поможет.
🔸 Решение 2:
Можно использовать готовую функцию heapq.merge() из стандартного модуля heapq!
Heap - это бинарное дерево, где каждый родительский элемент в дереве имеет значение меньшее чем дочерний.
То есть, по умолчанию все элементы как-либо отсортированы.
И тут вы спросите: что за магия?
Тоже самое только без расхода памяти? Волшебный генератор всех спасёт?
Нет, за всё приходится платить. В случае с heapq весь процесс драматически замедлится.
Но задача будет выполнена! 😎
Сделал для вас синтетический пример для генерации и мержа подобных файлов
Код смотреть здесь ↗️
▫️ make_logs() генерит 30 файлов по 50Mb для теста
▫️ merge_list() мержит файлы через простой список
▫️ merge_heapq() мержит файлы через heapq
▫️ memory_profiler считает используемую память (нужно установить модуль)
▫️ также есть замер времени
Кому лениво там же смотрите мои тесты:
1.5Gb и 19.5с против 19Mb и 2м 43с
памяти в 80 раз меньше, но времени в 8 раз больше
⚠️ ВАЖНО
для чистоты эксперимента запускать следует из консоли и по одному тесту на процесс. То есть закоментили второй, запустили первый, закоментили первый, запустили второй.
#bacik
Как смержить несколько файлов с отсортированными строками в один файл, тоже отсортированный?
🔸 Исходный файл:
▫️ в одной строке находится одна запись
▫️ запись содержит предсказуемое поле с некими данными для сортировки. Например, логи с указанием времени.
▫️ все записи в файле отсортированы по этому полю
🔸 Задача:
Смержить несколько таких файлов так, чтобы в финальном файле все записи были также отсортированы.
🔸 Решение 1:
Предположим, у меня JSON-логи
files = ['file1.jsonl', 'file2.jsonl', ...]
data = []
for file in files:
with open(file) as f:
data.expand(
f.readlines()
)
data.sort(key=lambda line: json.loads(line)['timestamp'])
with open('merged.jsonl', 'w') as f:
f.writelines(data)
Усложним задачу — размер каждого файла 5Gb 😱Это означает, что вам потребуется оперативной памяти 5*len(files) Gb.
И уже не каждый компьютер сможет смержить 3-4 таких файла. А если их 100?
fileinput может помочь написать более красивый код, но с памятью не поможет.
🔸 Решение 2:
Можно использовать готовую функцию heapq.merge() из стандартного модуля heapq!
Heap - это бинарное дерево, где каждый родительский элемент в дереве имеет значение меньшее чем дочерний.
То есть, по умолчанию все элементы как-либо отсортированы.
from heapq import merge
items = [
[3,2,6],
[1,5,4]
]
print(list(merge(*items)))
# [1, 2, 3, 4, 5, 6]
А учитывая, что merge это генератор, умеет работать с файлами и ему можно передать функцию для сортировки, он отлично подойдет для нашей задачи, так как полной загрузки в память не происходит!И тут вы спросите: что за магия?
Тоже самое только без расхода памяти? Волшебный генератор всех спасёт?
Нет, за всё приходится платить. В случае с heapq весь процесс драматически замедлится.
Но задача будет выполнена! 😎
Сделал для вас синтетический пример для генерации и мержа подобных файлов
Код смотреть здесь ↗️
▫️ make_logs() генерит 30 файлов по 50Mb для теста
▫️ merge_list() мержит файлы через простой список
▫️ merge_heapq() мержит файлы через heapq
▫️ memory_profiler считает используемую память (нужно установить модуль)
▫️ также есть замер времени
Кому лениво там же смотрите мои тесты:
1.5Gb и 19.5с против 19Mb и 2м 43с
памяти в 80 раз меньше, но времени в 8 раз больше
⚠️ ВАЖНО
для чистоты эксперимента запускать следует из консоли и по одному тесту на процесс. То есть закоментили второй, запустили первый, закоментили первый, запустили второй.
#bacik
Gist
Merging of huge sorted files
Merging of huge sorted files. GitHub Gist: instantly share code, notes, and snippets.
👍3
Наверняка вы замечали, что в Python есть удобная функция для получения переменной окружения
Почему так?
На самом деле энвайромент обновляется, но это значение не добавляется в словарь
Откройте исходник функции
Словарь
В тоже время, когда вы создаёте или изменяете ключ в
То есть, технически
Аналогично при удалении переменной вызывается еще одна built-in функция
Итого
▫️ Удобней всего явно обновлять переменные через
▫️
#basic
os.getenv(NAME)
И её "сестра" для создания или изменения переменных окруженияos.putenv(NAME, VALUE)
Но почему-то putenv() не работает как должно. Энвайромент не обновляется!os.putenv('MYVAR', '1')
print(os.getenv('MYVAR'))
... и ничего 😴Почему так?
На самом деле энвайромент обновляется, но это значение не добавляется в словарь
os.environ.Откройте исходник функции
os.getenv(). Это просто шорткат для os.environ.get()
В то время как putenv() это built-in С-функция.Словарь
os.environ (или точней класс из MutableMapping) создаётся из энвайромента в момент инициализации. Функция putenv() самостоятельно его не изменяет.В тоже время, когда вы создаёте или изменяете ключ в
os.environ, автоматически вызывается putenv() в методе __setitem__().То есть, технически
putenv() всё делает верно, но в os.environ это не отражается. Можно проверить так:>>> os.putenv('MYVAR', '123')
>>> os.system('python -c "import os;print(os.getenv(\'MYVAR\'))"')
123
Я объявил переменную в текущем процессе и вызвал дочерний процесс, который её унаследовал и получил в составе os.environ.Аналогично при удалении переменной вызывается еще одна built-in функция
unsetenv(), удаляющая переменную из системы.Итого
▫️ Удобней всего явно обновлять переменные через
os.environ
▫️ Есть способ неявно создать/удалить переменную через putenv/unsetenv, что не повлияет на os.environ но изменит энвайромент и передаст изменения сабпроцессам. Но так лучше не делать!▫️
os.environ это просто обертка для built-in функций putenv() и unsetenv(). #basic
GitHub
cpython/Lib/os.py at 3.10 · python/cpython
The Python programming language. Contribute to python/cpython development by creating an account on GitHub.
👍2
При форматировании числа в строку можно задать паддинг - заполнение нулями до нужной длины.
К сожалению (а может к счастью), уровень вложенности ограничен двумя. То есть, форматирование внутри форматирования внутри форматирования это ...
(Пример странный, но зато рабочий)
>>> '{}_v{:05d}'.format('name', 125)
'name_v00125'
А что если паддинг тоже задан переменной? В таком случае мы можем добавить форматирование этой переменной внутри формата первой. Порядок переменных следует указывать в порядке появление открывающейся скобки.>>> '{}_v{:0{}d}'.format('name', 125, 5)
'name_v00125'
Или вот так>>> '{}_v:{:{:02d}{}}'.format('name', 125, 5, 'd')
'name_v00125'
А можно глубже? К сожалению (а может к счастью), уровень вложенности ограничен двумя. То есть, форматирование внутри форматирования внутри форматирования это ...
ValueError: Max string recursion exceededНо никто не запрещает использовать один тип форматирования внутри другого.
(Пример странный, но зато рабочий)
>>> ('{}_v{:{:%0.2dd}{}}' % 2).format('name', 125, 5, 'd')
'name_v00125'
С f-string можно использовать 4 уровня, по количеству доступных типов кавычек. Можно, но не нужно 😕f'''{f"""{f'{f"{x}"}'}"""}'''
#tricks🔥13👍3
Ещё пара триков с форматированием!
▫️Порядки больших чисел можно разделять запятой (и только запятой)
#tricks
▫️Порядки больших чисел можно разделять запятой (и только запятой)
>>> '{:,}'.format(1_231_312)
'1,231,312'
▫️Если оставить пробел в форматировании float после ":" то он добавится в строку>>> '{: .2f}'.format(15)
' 15.00'
Но если подать отрицательное число, то знак минуса займёт этот пробел>>> '{: .2f}'.format(-15)
'-15.00'
Удобно для формирования строк одинаковой длины независимо от знака числа.#tricks
👍8
Синтаксис f-string позволяет использовать в строке символ обратного слеша "
▫️ вынести этот символ за скобки
\" но не позволяет использовать его внутри фигурных скобок.>>> lines = ['line1','line2']
>>> print(f'ITEMS: \n {"\n".join(lines)}')
SyntaxError: f-string expression part cannot include a backslash
Решения:▫️ вынести этот символ за скобки
n = '\n'
print(f'ITEMS: \n{n.join(lines)}')
▫️ заменить его на другое представление, например создавать нужный символ с помощью функции chr()
print(f'ITEMS: \n{chr(10).join(lines)}')
Чтобы узнать код символа следует использовать функцию ord()
>>> ord('\n')
10
А с юникодом не выйдет, там тоже слеш>>> print(f'ITEMS: \n{"\u000a".join(lines)}')
SyntaxError: f-string expression part cannot include a backslash
#tricks👍11😱1
Метод строки
А вот что будет по умолчанию
По умолчанию в качестве разделителя используется любой пробельный символ, будь то табуляция или новая строка. Включая несколько таких символов идущих подряд. А также игнорируются пробельные символы по краям строки.
#tricks #basic
split() разделяет строку на несколько строк по указанному символу>>> "a_b_c".split('_')
['a', 'b', 'c']
Можно указать максимальное количество разделений>>> "a_b_c".split('_', 1)
['a', 'b_c']
Или резать с другой стороны с помощью rsplit() (right split)>>> "a_b_c".rsplit('_', 1)
['a_b', 'c']
А что будет если оставить аргументы пустыми?>>> "a_b_c".split()Получаем список с одним элементом, потому что по умолчанию используется пробельный символ.
['a_b_c']
>>> "a b c".split()То есть это равнозначно такому вызову?
['a', 'b', 'c']
>>> "a b c".split(" ")
['a', 'b', 'c']
Кажется да, но нет! Давайте попробуем добавить пробелов между буквами>>> "a b c".split(" ")
['a', '', '', 'b', '', '', 'c']
И вот картина уже не так предсказуема 😕А вот что будет по умолчанию
>>> "a b c".split()Всё снова красиво! 🤩
['a', 'b', 'c']
По умолчанию в качестве разделителя используется любой пробельный символ, будь то табуляция или новая строка. Включая несколько таких символов идущих подряд. А также игнорируются пробельные символы по краям строки.
>>> "a\t b\n c ".split()Аналогичный способ можно собрать с помощью регулярного выражения. Но пробелы по краям строки придется обрабатывать дополнительно.
['a', 'b', 'c']
>>> import reЗдесь тоже можно указать количество разделений
>>> re.split(r"\s+", ' a b c '.strip())
['a', 'b', 'c']
>>> re.split(r"\s+", 'a b c', 1)А что если мы хотим написать красиво, то есть
['a', 'b c']
split() без аргументов, но при этом указать количество разделений? В этом случае первым аргументом передаём None
>>> "a\n b c".split(None, 1)Данный метод не учитывает строки с пробелами, взятые в кавычки
['a', 'b c']
'a "b c" '.split()Но для таких случаев есть другие способы.
['a', '"b', 'c"']
#tricks #basic
Telegram
Python Заметки
В посте про правильное использование аргумента shell упоминалось что в некоторых случаях атрибуты следует отправлять списком а не строкой. Что делать, если команда приходит именно строкой? Как её преобразовать в список?
Ответ очевиден
>>> cmd_str = 'ls …
Ответ очевиден
>>> cmd_str = 'ls …
👍25😱1😢1
Сегодня будет самый "двоичный" ("двойковый"? "двушный"? "двойственный"?) момент на вашем веку 🤩
Больше двоек в дататайме вы не застанете!
Успейте поймать момент! Будете показывать эпичный скриншот своим внукам)))
🥸 Для продуманных (ленивых): код на скрине, который сработает только сегодня и только 1 раз!
⏱ Открывайте окошки с часами и вперёд!
#offtop
Больше двоек в дататайме вы не застанете!
Успейте поймать момент! Будете показывать эпичный скриншот своим внукам)))
🥸 Для продуманных (ленивых): код на скрине, который сработает только сегодня и только 1 раз!
⏱ Открывайте окошки с часами и вперёд!
#offtop
😁10🔥5
⚠️ События последних дней сильно изменили жизнь многих из нас. Мы уже не будем прежними и мир вокруг не будет прежним.
Лично я всё ещё в некотором тупняке от происходящего...
Но этот канал не о политике и здесь я не буду рассуждать кто прав а кто виноват. Для нас сейчас главное — пережить пик кризиса и адаптироваться к новым реалиям. Обязательно беречь себя и помогать окружающим.
В свою очередь я хочу помочь всем, кто меня знает и читает. Поэтому у меня к вам есть три предложения...
#offtop
Лично я всё ещё в некотором тупняке от происходящего...
Но этот канал не о политике и здесь я не буду рассуждать кто прав а кто виноват. Для нас сейчас главное — пережить пик кризиса и адаптироваться к новым реалиям. Обязательно беречь себя и помогать окружающим.
В свою очередь я хочу помочь всем, кто меня знает и читает. Поэтому у меня к вам есть три предложения...
#offtop
❤3👍3
Из-за всем известных событий очень многие потеряли работу.
Для поиска вакансий вполне можно использовать паблики в telegram. Вот несколько которые мне известны:
https://t.iss.one/django_jobs
https://t.iss.one/javascript_jobs
https://t.iss.one/workzavr
https://t.iss.one/workoo
https://t.iss.one/Workesss
@g_jobbot
➡️ Чем шире о себе заявите, тем больше шансов найти нужный контакт. Поэтому предлагаю айтишникам и художникам бесплатно разместить на моём канале @pythonotes информацию о вас.
Формат сообщения можно сделать примерно следующий:
_______________________________
Имя Фамилия
Специализация
О себе
- Долго думаю, быстро делаю.
Кем хочу работать
- Разработчик мобильных приложений
Локация
- Удалённо, возможен переезд в ГородНейм
Знаю языки программирования
- JSON
- CSS
- HTML
Хорошо владею софтом
- Maya. Ротоскопинг, трекинг
- Nuke. Персонажная анимация
- 3DsMax. Композитинг и кленап
Где работал
- Microsoft, админ лифта
- Yandex, доставка пончиков
- Disney, протирка шариков от мышей
Контакты
- Телеграм: @username
- Почта: [email protected]
- Полное резюме (ссылка на GoogleDoc/LinkedIn/PDF)
_______________________________
Картинки не надо, смайлы без фанатизма.
Текст присылайте в этот временный канал, где будем обсуждать все вопросы:
▶️ @pn_work
🌼 Если найдутся желающие, вакансии тоже могу запостить
📅 Предложение актуально как минимум до лета 2022г.
Если будет хоть один пост, уже не зря старался)
📌 @pythonotes
#offtop
Для поиска вакансий вполне можно использовать паблики в telegram. Вот несколько которые мне известны:
https://t.iss.one/django_jobs
https://t.iss.one/javascript_jobs
https://t.iss.one/workzavr
https://t.iss.one/workoo
https://t.iss.one/Workesss
@g_jobbot
➡️ Чем шире о себе заявите, тем больше шансов найти нужный контакт. Поэтому предлагаю айтишникам и художникам бесплатно разместить на моём канале @pythonotes информацию о вас.
Формат сообщения можно сделать примерно следующий:
_______________________________
Имя Фамилия
Специализация
О себе
- Долго думаю, быстро делаю.
Кем хочу работать
- Разработчик мобильных приложений
Локация
- Удалённо, возможен переезд в ГородНейм
Знаю языки программирования
- JSON
- CSS
- HTML
Хорошо владею софтом
- Maya. Ротоскопинг, трекинг
- Nuke. Персонажная анимация
- 3DsMax. Композитинг и кленап
Где работал
- Microsoft, админ лифта
- Yandex, доставка пончиков
- Disney, протирка шариков от мышей
Контакты
- Телеграм: @username
- Почта: [email protected]
- Полное резюме (ссылка на GoogleDoc/LinkedIn/PDF)
_______________________________
Картинки не надо, смайлы без фанатизма.
Текст присылайте в этот временный канал, где будем обсуждать все вопросы:
▶️ @pn_work
🌼 Если найдутся желающие, вакансии тоже могу запостить
📅 Предложение актуально как минимум до лета 2022г.
Если будет хоть один пост, уже не зря старался)
📌 @pythonotes
#offtop
👍3
Помогая окружающим, лучше всего делать то, что умеешь делать лучше всего! Поэтому я решил сделать все свои курсы бесплатными и выложить в открытый доступ❗️
Был период в моей жизни, когда эти курсы помогли мне выжить. Теперь, я надеюсь, они помогут кому-то еще.
Спасибо всем, кто покупал мои курсы, даже если потом не смотрел 😁
Навыки программирования нынче оцениваются достаточно высоко, это шанс найти работу с зарплатой повыше, попросить повышения или просто улучшить свою продуктивность с помощью кодинга! Так что пользуйтесь 😉
Сразу скажу, курсы не свежие, записанны в 2014-2015 гг. Некоторая информация устарела но примерно на ±90% всё еще актуально.
Какие курсы доступны:
▫️ Advanced Python Scripting
Это компиляция из 3х курсов начального, среднего и высокого уровня сложности. С нуля до создания собственных десктоп-приложений.
▫️ Python for Maya
Курс для Python-разработчиков в Maya. Да, Autodesk ушел от нас, но скорее всего, вернётся)
▫️ Python for Nuke
Курс для Python-разработчиков в Nuke.
▫️ Python for Houdini
Курс для Python-разработчиков в Houdini. Самый отстающий в актуальности курс, так как Houdini развивается и меняется очень стремительно и кардинально. Тем не менее, 80-90% курса актуальна.
▫️ Houdini Fundamentals
Курс поможет познакомиться с крутым софтом для 3D графики — SideFX Houdini. Записан на версии 16. Рассчитан на нулевой уровень подготовки.
На этот раз курс не про Python, только про сам софт.
Все Python-курсы записаны с Python2, вам потребуется изучить особенности перехода на версию Python3, о чем я не раз говорил на своём канале. Ищите по хэштегу #2to3
💬 Остальные подробности в комментах
Переходите на сайт школы и выбирайте курс:
➡️ https://cgninjas.ru/ ⬅️
📌 @pythonotes
#offtop
Был период в моей жизни, когда эти курсы помогли мне выжить. Теперь, я надеюсь, они помогут кому-то еще.
Спасибо всем, кто покупал мои курсы, даже если потом не смотрел 😁
Навыки программирования нынче оцениваются достаточно высоко, это шанс найти работу с зарплатой повыше, попросить повышения или просто улучшить свою продуктивность с помощью кодинга! Так что пользуйтесь 😉
Сразу скажу, курсы не свежие, записанны в 2014-2015 гг. Некоторая информация устарела но примерно на ±90% всё еще актуально.
Какие курсы доступны:
▫️ Advanced Python Scripting
Это компиляция из 3х курсов начального, среднего и высокого уровня сложности. С нуля до создания собственных десктоп-приложений.
▫️ Python for Maya
Курс для Python-разработчиков в Maya. Да, Autodesk ушел от нас, но скорее всего, вернётся)
▫️ Python for Nuke
Курс для Python-разработчиков в Nuke.
▫️ Python for Houdini
Курс для Python-разработчиков в Houdini. Самый отстающий в актуальности курс, так как Houdini развивается и меняется очень стремительно и кардинально. Тем не менее, 80-90% курса актуальна.
▫️ Houdini Fundamentals
Курс поможет познакомиться с крутым софтом для 3D графики — SideFX Houdini. Записан на версии 16. Рассчитан на нулевой уровень подготовки.
На этот раз курс не про Python, только про сам софт.
Все Python-курсы записаны с Python2, вам потребуется изучить особенности перехода на версию Python3, о чем я не раз говорил на своём канале. Ищите по хэштегу #2to3
💬 Остальные подробности в комментах
Переходите на сайт школы и выбирайте курс:
➡️ https://cgninjas.ru/ ⬅️
📌 @pythonotes
#offtop
❤37👍19🥰1😁1
Раньше на курсах была проверка домашних заданий и
фитбек. Теперь, по понятным причинам, я не смогу это поддерживать в том же объёме.
Чтобы вам не учится в сферическом вакууме, я сделал для вас площадку для общения. А точней две!
Там вы сможете помогать друг другу, ведь старые студенты тоже подтянутся, за что я буду им очень благодарен.
Я тоже буду отвечать на ваши вопросы по возможности.
Основная площадка:
➡️ Discord Сервер
Запасной вариант:
➡️ Telegram Чат
👍 Вход свободный, все чаты открыты.
🤬 Никакой политики и токсичности! Только по делу!
💣 Нарушителей банить буду резко и с размаху!
📌 @pythonotes
#offtop
фитбек. Теперь, по понятным причинам, я не смогу это поддерживать в том же объёме.
Чтобы вам не учится в сферическом вакууме, я сделал для вас площадку для общения. А точней две!
Там вы сможете помогать друг другу, ведь старые студенты тоже подтянутся, за что я буду им очень благодарен.
Я тоже буду отвечать на ваши вопросы по возможности.
Основная площадка:
➡️ Discord Сервер
Запасной вариант:
➡️ Telegram Чат
👍 Вход свободный, все чаты открыты.
🤬 Никакой политики и токсичности! Только по делу!
💣 Нарушителей банить буду резко и с размаху!
📌 @pythonotes
#offtop
Discord
Join the paulwinex-courses Discord Server!
Check out the paulwinex-courses community on Discord - hang out with 111 other members and enjoy free voice and text chat.
👍11🔥4
Celery это крутой инструмент для очереди задач web-вашего приложения на Python.
Но его монополию всё больше притесняет другая библиотека - dramatiq.
По словам автора, эта библиотека лишена всех проблем Celery
If you’ve ever had to use Celery in anger, Dramatiq could be the tool for you.
Обычно далее я пишу примеры как можно быстро опробовать библиотеку. Но кода там прилично, поэтому я сделал репозиторий с примером приложения на Flask.
Что реализовано в этом приложении:
▫️Засетаплен dramatiq совместо с Flask с помощью flask-dramatiq
▫️Отправка простых фоновых задач
▫️Отправка периодических cron-задач по расписанию с помощью periodiq
▫️Отмена запущенных задач с помощью dramatiq_abort
▫️Задача с отложенной проверкой результата
▫️Всё закатано в Docker, поэтому заводится с полпинка
В качестве брокера используется Redis. Он стартует быстрей чем RabbitMQ и dramatiq_abort пока что поддерживает только его. Шаблонов нет, фронт максимально глуп и минималистичен.
🌎 Код смотрим здесь https://github.com/paulwinex/flamatiq
Также стоит посмотреть:
dramatiq_dashboard
django_dramatiq
#libs
Но его монополию всё больше притесняет другая библиотека - dramatiq.
По словам автора, эта библиотека лишена всех проблем Celery
If you’ve ever had to use Celery in anger, Dramatiq could be the tool for you.
Обычно далее я пишу примеры как можно быстро опробовать библиотеку. Но кода там прилично, поэтому я сделал репозиторий с примером приложения на Flask.
Что реализовано в этом приложении:
▫️Засетаплен dramatiq совместо с Flask с помощью flask-dramatiq
▫️Отправка простых фоновых задач
▫️Отправка периодических cron-задач по расписанию с помощью periodiq
▫️Отмена запущенных задач с помощью dramatiq_abort
▫️Задача с отложенной проверкой результата
▫️Всё закатано в Docker, поэтому заводится с полпинка
В качестве брокера используется Redis. Он стартует быстрей чем RabbitMQ и dramatiq_abort пока что поддерживает только его. Шаблонов нет, фронт максимально глуп и минималистичен.
🌎 Код смотрим здесь https://github.com/paulwinex/flamatiq
Также стоит посмотреть:
dramatiq_dashboard
django_dramatiq
#libs
GitLab
Étienne BERSAC / Flask-Dramatiq · GitLab
Adds Dramatiq support to your Flask application -- https://flask-dramatiq.rtfd.io/
👍14👎1👏1
Блокировки, они повсюду...
Ох как надоела эта тенденция. Наша IT индустрия буквально стреляет себе в ногу силами определённых личностей и их мнений о том как для нас будет лучше.
Как бы там ни было, сейчас все советуют экстренно качать и переносить свои видосы с YouTube на отечественные аналоги.
Да, можно использовать оконные софты со всеми удобствами (VLC или Youtube Video Downloader), но мы лучше покодим😉
Я набросал небольшой скрипт для скачивания плейлиста с YouTobe в один клик.
Из зависимостей только модуль
▫️ Для скачивания выбирается максимально доступный размер видео файла.
▫️ Если файл уже существует то скачивания не будет. Удобно для апдейта обновлений.
▫️ Скрипт качает всё из плейлиста с помощью класса
#source
Ох как надоела эта тенденция. Наша IT индустрия буквально стреляет себе в ногу силами определённых личностей и их мнений о том как для нас будет лучше.
Как бы там ни было, сейчас все советуют экстренно качать и переносить свои видосы с YouTube на отечественные аналоги.
Да, можно использовать оконные софты со всеми удобствами (VLC или Youtube Video Downloader), но мы лучше покодим😉
Я набросал небольшой скрипт для скачивания плейлиста с YouTobe в один клик.
Из зависимостей только модуль
pytube. ▫️ Для скачивания выбирается максимально доступный размер видео файла.
▫️ Если файл уже существует то скачивания не будет. Удобно для апдейта обновлений.
▫️ Скрипт качает всё из плейлиста с помощью класса
pytube.Playlist. Если хотите скачать канал, то просто замените класс на pytube.Channel
from pytube import ChannelЗабираем здесь ➡️
PLAYLIST_URL = 'https://www.youtube.com/channel/XXXXXXXXX'
playlist = Channel(PLAYLIST_URL)
#source
Gist
download_from_youtube.py
GitHub Gist: instantly share code, notes, and snippets.
👍21
Репозитори на почитать для расширения кругозора.
▫️ Большой ликбез по экосистеме Python
https://github.com/brunocampos01/understanding-the-python-ecosystem
▫️Подборка самых популярных полезностей для веб разработчиков
https://github.com/ml-tooling/best-of-web-python
▫️Подборка библиотек для тех кто уважает типизацию в Python
https://github.com/typeddjango/awesome-python-typing
#basic #libs
▫️ Большой ликбез по экосистеме Python
https://github.com/brunocampos01/understanding-the-python-ecosystem
▫️Подборка самых популярных полезностей для веб разработчиков
https://github.com/ml-tooling/best-of-web-python
▫️Подборка библиотек для тех кто уважает типизацию в Python
https://github.com/typeddjango/awesome-python-typing
#basic #libs
👍9❤6
Приветствую подписчиков.
Я даже несколько удивлён как это вы еще не разбежались 😻))
Многие мне пишут в личку с вопросом "Где брать курсы если сайт закрылся?".
Отвечаю — сайт не закрылся❗️
Ввиду некоторой обстановки 💣⚔️🚓 💥 мой хостинг (Украинский кстати) немножко "закончился".
Мой хороший знакомый, админ данного хостинга, включил мой сервер на пару часов и я скачал все данные. После чего создал новый сервер в Европе и поднял там сайт.
На данный момент я закончил настройку и теперь сайт снова доступен.
А так же добавил домен COM, для тех у кого RU блокируют.
Теперь сайт доступен по адресам:
https://cgninjas.ru/
https://cgninjas.com/
(возможно на com почта не будет работать)
Также просят выложить всё на Youtube или на Torrent. Да я не против, только исходники у меня пропали вместе с HDD, так что надо потратить немало времени чтобы скачать, систематизировать и залить. Если вдруг выкрою недельку на это, то обязательно сделаю)))
▫️Погодите, а что с каналом? он тоже всё?
Нет, ввиду всё тех же событий 💥 потух творческий запал, и мотивация пропала...
Но идеи есть, заготовки тем тоже. Возможно, я жду хороших новостей.
Обязательно продолжу серию заметок... надеюсь скоро. А до тех пор я не хочу вас раздражать глупой рекламой глупых каналов (которые запрудили телеграм и предложения которой приходят регулярно) а лучше просто помолчу.
"Благодарим за понимание ©"
ЗЫ. Не пишите пжлст в личку, есть чат для этого
➡️ CGNinjasChat
#offtop
Я даже несколько удивлён как это вы еще не разбежались 😻))
Многие мне пишут в личку с вопросом "Где брать курсы если сайт закрылся?".
Отвечаю — сайт не закрылся❗️
Ввиду некоторой обстановки 💣⚔️🚓 💥 мой хостинг (Украинский кстати) немножко "закончился".
Мой хороший знакомый, админ данного хостинга, включил мой сервер на пару часов и я скачал все данные. После чего создал новый сервер в Европе и поднял там сайт.
На данный момент я закончил настройку и теперь сайт снова доступен.
А так же добавил домен COM, для тех у кого RU блокируют.
Теперь сайт доступен по адресам:
https://cgninjas.ru/
https://cgninjas.com/
(возможно на com почта не будет работать)
Также просят выложить всё на Youtube или на Torrent. Да я не против, только исходники у меня пропали вместе с HDD, так что надо потратить немало времени чтобы скачать, систематизировать и залить. Если вдруг выкрою недельку на это, то обязательно сделаю)))
▫️Погодите, а что с каналом? он тоже всё?
Нет, ввиду всё тех же событий 💥 потух творческий запал, и мотивация пропала...
Но идеи есть, заготовки тем тоже. Возможно, я жду хороших новостей.
Обязательно продолжу серию заметок... надеюсь скоро. А до тех пор я не хочу вас раздражать глупой рекламой глупых каналов (которые запрудили телеграм и предложения которой приходят регулярно) а лучше просто помолчу.
"Благодарим за понимание ©"
ЗЫ. Не пишите пжлст в личку, есть чат для этого
➡️ CGNinjasChat
#offtop
👍47❤29