Ответы пользователя по тегу Python
  • Почему crawler, работает 7 часов? Не зациклен ли код?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Некоторые сайты могут сдетектировать бота и подкинуть свинью. Например - отдавать бесконечный поток шумящего html-кода который просто нагружает работой BeautifulSoup. Но чтобы говорить о зависании - надо сначала придумать формальный критерий. Например - парсинг одного url запускается в отдельном потоке и lifetime потока не должен превышать к примеру 30 секунд. Если превышает - мы считаем что он глотает шум или не получает контента. И прибиваем поток. ЛОггируем событие и идем дальше по ссылкам.
    Ответ написан
    Комментировать
  • Можно ли написать OS на Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос интересный. Из серии дискуссионных.

    Сходу я-бы тоже написал - нельзя. Потому что не делают ОС на питонах обычно. Но
    давайте раздвинем границы и порассуждаем.

    Что такое ОС и вообще из каких частей она состоит? И какие к ней требования?
    Когда говорят о написании ОС - то обычно имеют в виду некий эксперимент или чью-то
    курсовую или дипломную работу в результате которой появляется нечто. И это нечто
    - имеет загрузчик. Загружается с флешки или диска. Содержит базовые средства
    ввода команд (шелл). Управляет хотя-бы сетевым интерфейсом и дисками. И умеет
    запускать хотя-бы 1 экспериментальную программу написанную для ЭТОЙ-же ОС.
    А иначе - какой смысл вообще делать ОС под которую нет программ.
    - обладает небольшими размерами. В самом деле. У вас же не Debian чтоб
    тащить пачку DVD дисков? Какие размеры кода генерит Python. Ну он вообще не генерит
    кода как такового. Хотя возможно с использованием CPython мы сможем собрать
    некий бинарник но здесь надо пообсуждать его недостатки. Размеры. И потенциальные
    уязвимости самой архитектуры. Если в коде существует точка где можно вызвать eval - то
    это уже потенциальное место для хакеров. Тут - требуется обсуждение с людьми которые
    чуть больше знают чем я в инфо-безопасности. Передам им слово.
    - обладает высокой производительностью. Близко стоит к железу и не имеет никаких
    посредников. Тоесть между ОС и железом не должно быть никаких прослоек. Какой длины
    стек технологий стоит между Python и железом? ХЗ. Пускай знающие пояснят. С моей точки
    зрения Python близок к Lisp или к JavaScript по духу и по идеологии. А надо быть близким
    к C++, Rust e.t.c. Мультизадачность опять-же до кучи. Ее эффективно можно реализовать
    только если код-быстрый.

    Из творческих экспериментов о которых я слышал. ОС - Beos. Была написана много лет
    назад на ООП языках как ОС для мультимедиа (?) или для чего-то там подобного. В настоящий
    момент считается мертвой.

    Еще была Singularity OS. Написана на ДотНете. Больше ничего о ней не знаю. Просто
    читал когда-то в журнале. Сильно удивился. Дай бох. Если так можно то хорошо. Кто знающие
    в теме - проясните ее статус на данный момент.

    Еще слышал о том что дедушка Никлаус Вирт в своё время тоже создавал ОС. На базе Оберон.
    Причем у него там были воплощены много его мечт и чаяний. Всякие модули. Динамические
    библиотеки. UI был абсолютной свой. Я смотрел на презентации. Не впечатлило. Хотя уважаю
    такую последовательность и упорство. Кто пользовался или устанавливал - просвятите.

    Любые клоны Линукс. Да они являются осями но их создатели не закладывали никаких
    усилий по разработке их ядра. Можно ли их рассматривать в данном топике? ХЗ. Я-бы не стал.
    Есть известная ОС BolgenOS которая стала мемом. Ее создатель очень много потратил на само-пиар
    и очень мало на разработку. Его усилия заключались во взломе всех текстовых надписей и копирайтов
    а также картинок и обоев в типичном дистрибутиве Линукс. Стоит ли это рассматривать в топике?
    Как по мне - неспортивно как-то. Нетворчески... Сюда-же до кучи Гентушников. Ничем особ значимым
    они не отличились.

    Любая встраиваемая в железо система по определению является ОС. Только пишется обычно
    на Си или Асме или каком-нибудь Форте. Но она обычно очень ограниченная и в ней нет ничего
    что-бы напоминало современные ОС. В них часто даже нет консоли. Поскипаем такие.

    Резюмируя. Свою ОС писать - хорошо. Познавательно. Но лучше не на Python а на Си. И подходить
    к вопросу нужно с глубокой идеей. Должны быть цели. Для чего. Чего мы хотим получить так чтоб
    не тупо копировать Linux. Нужно очень хорошо знать железо. Лучше - нестандартное. Там - больше
    будет пространство для маркетинга. Эльбрус там. Байкал. Или процессор GA144
    который создал Чарли Мур (дада тот самый) в котором куча микро-ядер и которые понимают
    Forth.

    Вобщем надо знать железо.
    Ответ написан
    Комментировать
  • Почему неправильно вычисляются все числа, полученные суммой двух избыточных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут - надо шаг за шагом. Твой вопрос заключается сначала в стардартной формулировке задачи Эйлера.

    И потом с утверждения
    Я создал алгоритм, который сначала находит все делители чисел от 1 до 28123(хотя можно и 28123/1.5)

    Ты его проверил? Есть ли какой-то тест который может быстро проверить что ты не ошибся? Я на самом деле ничего плохого пока не хочу сказать по твоему методу решения, но надо как-то двигаться более доказательно. А то получается ты вывалил на голову бедных Python разработчикам какую-то математическую идею (кстати тегнуть надо топик) и далее задаешь вопрос именно по ошибкам Python - приложения.

    Я считаю нет, дорогой товарищ. Тут до Python еще далеко. Тут надо как в математике. Пристально следить за каждым statement и подвергать его сомнениям.

    P.S Здесь нижнее округление идет.
    int(math.sqrt(i)
    Это нормально? Может верхнее надо?
    Ответ написан
  • Как просуммировать интервал чисел?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это называется арифметическая прогрессия. Ее сумма считается очень просто. Там и циклы не надо.
    Ответ написан
    2 комментария
  • Ошибка [Errno 2] No such file or directory при, что делать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я вот щас попробовал os.listdir. Там надо бекслеши экранировать или буквочку r добавлять. Проверь.

    import os
    
    os.listdir('c:\\tmp')
    
    os.listdir(r'c:\tmp')
    Ответ написан
  • Как лучше всего организовать работу с большими списками в Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Изначально софт работал отлично, но в последнее время, с увеличением объема списков - стали постоянно вылезать какие-то глюки в логике работы софта, хотя код остался неизменным. В связи с чем было принято решение переписать код на другой ЯП, конкретно выбор пал на python.

    Мне не нравится ваше решение. Чисто технически C#/Net - генерирует более совершенный исполнимый код. И он и должен работать быстрее.

    Дайте шанс c# приложению. Запустите под профайлером и найдите тот алгоритм или кусок кода который работает медленно.

    Иначе вместо одной проблемы вы получите две новых. Python не славится рациональным хранением коллекций в памяти. Может быть еще хуже.
    Ответ написан
    Комментировать
  • Как менять параметр функции внутри другой функции?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для обобщенного метода интегрирования как раз удобно передавать не один параметр а всю лямбду.

    f = lambda x, y: x**n

    передавай эту всю колбасу как параметр для dbl_integral.
    Ответ написан
    Комментировать
  • Как добавить префикс в xml python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Все нормально добавляется. Разбирайся.

    >>> import xml.etree.ElementTree as ET
    >>>
    >>> ET._namespace_map
    {'http://www.w3.org/XML/1998/namespace': 'xml', 'http://www.w3.org/1999/xhtml': 'html', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#': 'rdf', 'http://schemas.xmlsoap.org/wsdl/': 'wsdl', 'http://www.w3.org/2001/XMLSchema': 'xs', 'http://www.w3.org/2001/XMLSchema-instance': 'xsi', 'http://purl.org/dc/elements/1.1/': 'dc'}
    
    >>> ET.register_namespace("CadEng4", "urn://x-artefacts-rosreestr-ru/commons/complex-types/cadastral-engineer/4.1.1")
    >>>
    >>> ET._namespace_map
    {'http://www.w3.org/XML/1998/namespace': 'xml', 'http://www.w3.org/1999/xhtml': 'html', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#': 'rdf', 'http://schemas.xmlsoap.org/wsdl/': 'wsdl', 'http://www.w3.org/2001/XMLSchema': 'xs', 'http://www.w3.org/2001/XMLSchema-instance': 'xsi', 'http://purl.org/dc/elements/1.1/': 'dc', 'urn://x-artefacts-rosreestr-ru/commons/complex-types/cadastral-engineer/4.1.1': 'CadEng4'}
    Ответ написан
  • Как определить размер объекта на фото при помощи python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В криминалистике обычно для определения размеров объекта на фото, с ним рядом кладут что-то имеющее известный размер. Коробок спичек. Линейку. Или монету. В таком случае наверное можно сопоставить размеры.

    В географии в углу карты обычно рисуют маленькую линейку масштаба. По ней тоже можно что-то определить.

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

    В остальных случаях нужно иметь наверное представление о самом объекте. Если это камень природной формы - то чорт его знает какие у него размеры. И в данной задаче это наверное будет главное ограничение.
    Ответ написан
  • Как реализовать многопоточный парсинг ссылок из файла?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не всегда нужно кидаться в разработки потоков. Иногда есть подходы которые обеспечивают компромисс.
    Например у тебя 100 000 ссылок. И ты хочешь запустить это в 16 независимых задач (процессов или потоков неважно). Предположим что у тебя уже есть процесс python который решает эту задачу в 1 поток. Далее если мы разделишь эти 100 000 сыслок на 16 частей - то ты можешь запустить 16 копий процесса передав ему параметр. Что-то вроде

    $ python3 parser.py links.lst 0
    $ python3 parser.py links.lst 1
    ....
    $ python3 parser.py links.lst 15


    Здесь параметр links.lst 15 означает что надо брать каждую 15 строку по модулю 16 их исходного файла.
    Ответ написан
  • Как реализовать генерацию всех комбинаций пароля по маске?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тебе нужно сгенерировать все 4х буквенные слова и потом четырех-циферные, соединить эти две коллекции декартово и потом просто расставить нужные буквы по нужным позициям.
    Ответ написан
    Комментировать
  • Можно ли написать хранимую процедуру в Oracle DB на Python или на другом из языков программирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не помню как щас. Во времена десятки (Oracle 10g) оракл поддерживал следующие языки разработки хранимок.
    - PL/SQL
    - Java
    - external (C language/binary files)

    Можно попробовать ваш Python-код завернуть в Jython. И запустить внутри Java процедуры. Но готов спорить что не взлетит по нехватке памяти. Дело в том что инстанс по умолчанию конфигурируется с очень тухлыми настройками jvm xmx и там вряд-ли будет что-то больше чем 128m. Да и сама JVM была очень тухлых версий. Что-то вроде 1.5. И это была не та Java которая сейчас OpenJDK. Вобщем велик шанс что не взлетит. Но попробуйте. Обычно Ораклисты не любят увеличивать пул для JVM т.к. он обычно является балластом.

    Есть еще вариант - как-то собрать бинарник из Python кода. И подключить его как сишный код. Здесь я не вкурсе можно это или нет для Python. Если в бинарник вшивается сам интерпретатор - то может получится что-то толстое и монстро-подобное. Вобщем пробуйте сами.

    Вообще разработка хранимок на кастомных языках - это огромная авантюра. И тут никто наперед не скажет сработает это или нет. Это сильный шаг в сторону от Oracle-стиля разработки. И вообще процессное пространство Oracle лучше экономить и не запускать там ничего стороннего. Если вам сильно нужен Python - запускайте его отдельным процессом и подключайтесь через клиент и работайте.
    Ответ написан
    Комментировать
  • Можно ли без маркеров измерять фактический FPS видео?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я могу ошибаться но с точки зрения современных видео-кодеков понятие кадр-в-секунду уже не существует. Грубо говоря кодек может фиксировать изменения с частотой 60Гц но алгоритмы сжатия не гарантируют что именно ПОЛНЫЙ кадр (все пиксели будут обновлены). За полседние лет 10 вообще создатели видео-кодеков - молодцы - прошли такой путь развития. Они научились детектировать панорамирование и очень умным образом кодировать только те фрагменты кадра которые интересны нашему глазу.

    В качестве доказательства моих слов. Я предлагаю вам сгенерировать sequence картинок где есть рандомый цветной шум из пикселов и сжать его vdub или ffmpeg с нужной частотой и хорошим сжатием и потом посмотрите по кадрам что реально меняется и что сильно БЛУРИТСЯ и ГДЕ обновляется.
    Ответ написан
  • Как реализовать рекурсию в UML (диаграммы классов)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Напомню что UML - это набор различных способов описывать сущности мира информатики. И типов диаграмм бывает много. Под данную задачу подходит и реляционная диаграмма и диаграмма классов.

    В обоих из них можно изобразить стрелочкой или агрегацию (для классов) или связь child-parent как ссылочный
    ключ в таблицах.

    В случае с классами достаточно просто описать что поле имеет тот-же тип что и сам класс. Это будет всем понятно.
    Ответ написан
    Комментировать
  • Имею базу в формате txt размером 2gb, как отсортировать по количеству символов на строку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это задача на смекалку. Тут на самом деле сортировать не надо. Тут нужен роутинг слов в разные файлы.
    В 1 проход делается. Разумеется мы должны предполагать что в 2Гб файле будут не сильно длинные строки.

    Допустим для среднего текстового файла 80 символов на строку (стандарт такой был в 20м веке) мы получим
    80 файлов.

    По смыслу это похоже на сортировку подсчетом. Это когда кардинальность выборки крайне низка. Гендер например.
    Ответ написан
    Комментировать
  • Что я делаю не так, и почему нейросеть не генерирует уникальный текст?

    mayton2019
    @mayton2019
    Bigdata Engineer
    А откуда вытекает утверждение об уникальности? На самом деле я не знаю. Но мне интересно, понимает ли автор свойства своего кода.
    Ответ написан
  • Как улучшить цикл for?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно при улучшении (рефакторинге) ставятся две разных задачи. Первое - это улучшение читабельности кода.
    И второе - это улучшение производительности (пропускной способности или времени отклика).

    Это две задачи на каком-то этапе противоречат друг другу. Есть график (кривая Шипилева) который это демонстрирует.
    Ответ написан
    Комментировать
  • Почему битовый сдвиг влево работает по разному в JS и Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для python3
    >>> type(34567 << 16)
    <class 'int'>

    вот этот класс int представляет собой хитрую штуку. Это как-бы аналог целого числа бесконечно большой радрядности.

    А JavaScript там по ситуации либо int (32 bit) либо double.
    Ответ написан
  • Как научиться решать задачки на python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По математики не силен ((

    Не переживай сильно. Для 80% современных задач разработки тебе понадобиться только школьная математика.
    Сложить умножить и процент посчитать. Всё остальное - технический дискурс что делать и как делать.

    Высокая наука ушла в области datascience, AI, quantum-computing, и всякие формальные логические (тьфу) системы где теоретики занимаются онаниз.... эээ короче фигнёй страдают.

    Что тебе понадобиться на самом деле. Структуры python. Библиотеки. Основы мульипоточки. Работа с файлами и сетью. Там не бох весть какая наука. Школьники разбираются. Вот... тут каждый день кодят дискорд и телеграм ботов.

    Еще обрати внимание на операции со строками. Строки - основа современного бизнес-кода. Сравнение строк. Подстроки. Замены. Поиск по регулярке. Это должно быть выучено как молитва. Очень часто программист хорошо умеющий работать со строками выкрутится из любой ситуации. Распарсит json и так далее вручную.
    Ответ написан
    2 комментария
  • Как перескочить в range преждевременно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Похоже автор занимается расчетом простых чисел.

    Значить так. Четные числа - всегда - составные. Поэтому их можно даже не проверять и сразу прыгать по нечетным 3,5,7....

    Внутренний цикл не надо делать от 2 до i. Делитель 2 мы уже исключили выше. Поэтому начинаем с тройки и гоним не до n а до квадратного корня из n. Или наоборот возводим в квадрат. Тут надо понять что для Python быстрее будет. Я на С++ делал там по другому.

    Для более глубокой оптимизации все найденные простые - пишутся в array и участвуют во внутреннем цикле как делители. Это еще быстрее.
    Ответ написан
    Комментировать