• Почему при запросе в python mysql бд выдает ошибку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В MySQL 8.0.2 и выше GROUPS - зарезервированное слово. Если хотите так назвать таблицу или колонку, надо брать название в обратные апострофы - `groups`.
    Ответ написан
    1 комментарий
  • Что эффективней, чтение из файла или массив?

    @dmshar
    Уважаемый mayton2019 дал в общем-то почти исчерпывающий ответ. Но раз вы задали этот вопрос "из возникшего интереса", то есть шанс, что и другим ответы данной темы будут интересы, потому попробую еще чуть-чуть дополнить упомянутый ответ.

    Возможно многие и не слышали, но тем не менее существуют т.н. In-memory database (по-русски это, кажется, называется "Резидентная база данных", но я не уверен). Применяются такие системы как правило в высоконагруженных приложениях - в системах провайдеров телекоммуникационных услуг, когда-то читал - что в системах он-лайн биржевой торговли и пр. Там где данных очень много и доступ к ним нужен очень быстро. И главное - владелец таких данных оччччеееень богатенький, что-бы позволить себе приобрести оборудование с объемом оперативной памяти сопоставимым с объемом внешней памяти для "обычных" серверов баз данных. И вот тогда, для таких задач все данные СУБД, включая все индексы и другой служебно-вспомогательной информации, загоняются в оперативную память, обеспечивая и нужную скорость доступа и удобство доступа, которое обычно присуще СУБД.
    Главнейшая проблема, которую решают разработчики таких систем - как обеспечить целостности базы данных при внезапной перезагрузке систем. Это влияет на производительность In-memory database, заставляя тратить часть вычислительных ресурсов на синхронизацию данных в ОП и резервных копий на внешней памяти.
    Список таких систем можно, кстати, найти даже в Википедии:
    https://en.wikipedia.org/wiki/List_of_in-memory_da...

    Если же "спуститься" с небес на землю и учесть финансовые возможности "нормального" пользователя, то например, в языке программирования Python есть такой модуль - Pandas. По сути он дает удобство доступа к данным, почти такое-же (а может и еще большее) как SQL, сохраняя таблицы в ОП. А скорость обработки - сопоставимую с реализацией на "голых" массивах, а для сложных поисковых запросов - и еще большую. Естественно, что объем таблиц (DataFrame в терминологии Pandas) не может быть слишком большим. И не смотря на то, что есть прямой шлюз для перехода от DataFrame к SQL-структурам СУБД и обратно, скорость работы "в памяти" на много выше, чем скорость работы с теми-же данными, выгруженными в БД. Поэтом программист может комбинировать работу DataFrame для скорости обработки и СУБД для долговременно энергонезависимого хранения, найдя приемлемый для своего приложения компромисс.
    Ответ написан
    2 комментария
  • Что эффективней, чтение из файла или массив?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Если возникает вопрос "память или файл?", это значит что есть какие-то проблемы хранения в памяти: данных много и памяти может не хватить, данные должны сохраниться при перезапуске приложения, данные должны быть доступны из других приложений/инстансов, что-то ещё.
    В таком случае задачу хранения/записи/чтения данных лучше поручить отдельному сервису. Про базы данных уже сказали, я немного дополню. Если данные можно свести к такому представлению как пара ключ-значение, можно использовать базы данных NOSQL или сервисы типа Redis. Помимо стандартного интерфейса доступа и высокой скорости, они обладают хорошим качеством - их можно конфигурировать.
    Допустим, ты поначалу настроил сервис на хранение данных в памяти, а потом решил что для надёжности надо отписывать данные на диск (все, не все, сразу, периодически и т.п.). Ты просто прописываешь соответствующий конфиг - и всё, сервис начинает работать по-другому. А для твоего приложения ничего не изменилось (ну, кроме скорости доступа).
    Ответ написан
    Комментировать
  • Что эффективней, чтение из файла или массив?

    vabka
    @vabka
    Токсичный шарпист
    Оба варианта применимы.
    Нужно отталкиваться от конкретной задачи, чтобы сказать, какой будет лучше.
    Иногда может даже будет эффективнее применить и то и другое одновременно.

    Массив в оперативной памяти - быстро, но с выделением большого непрерывного участка оперативной памяти могут быть проблемы.
    При этом её состояние будет сброшено после перезапуска программы.

    Файл на диске - медленно, но можно будет гораздо больше данных сохранить.
    Ну и файл на диске продолжит существовать после завершения работы программы и при следующем запуске - это тоже может быть в некоторых случаях полезно и даже необходимо, а иногда наоборот - вредно.
    Ответ написан
    Комментировать
  • Что эффективней, чтение из файла или массив?

    DollyPapper
    @DollyPapper
    Спорный вопрос. Смотря что мы с данными хотим делать и как часто. Есть возьмем к примеру базы данных, и массив и захотим поискать данные, то вероятно файл (бд) окажется даже выгодней, поскольку поиск в массиве будет занимать O(n) а поиск на диске O(logn) при условии что ищем мы по индексу
    Ответ написан
    3 комментария
  • Что эффективней, чтение из файла или массив?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос не глупый а вполне себе хороший.

    Его плавное развитие приводит к концепции баз данных. Самое главное что можно сказать тезисно это
    1) Пока памяти хватает (массив) - используй смело память
    2) Диск - больше и дешевле памяти
    3) С памятью работать легко. С диском - очень неудобно и надо обрабатывать IOExceptions почти всегда.
    Диски внезапно полны сюрпризов. Могут быть сетевыми дисками.
    4) Разные диски имеют скорость на порядки разную.
    5) Диски ведут себя очень плохо на random access. От этого даже метрика IOPS появилась.
    Ее очень любят обсуждать админы баз данных.
    6) Существуют структуры данных которые спецом создавались только для дисков (B+Tree)
    7) Диск - переживает выключение питания.
    8) Самые разумные решения - сочетают в себе и диск и память в тех частях кода где это нужно.
    9) Есть интерфейсы программирования которые виртуализирут диск как память. Этим пользуется
    SQLite например.
    10) Диск может достигать очень высокой последовательной скорости чтения или записи в файл
    при условии отсутствия конкурирующих записей в данный момент. Этим пользуются в БД
    для журналирования событий.

    В принципе если современный программист просто будет использовать только оперативную память
    то никто ему не сможет ударить по рукам или подойти с какой-то метрикой и чего-то там измерив
    сказать что он неправ. Тут уж только падения по OOM и потери информации и performance issues
    могут быть каким-то значимым аргументом.
    Ответ написан
    3 комментария
  • Что эффективней, чтение из файла или массив?

    Stalker_RED
    @Stalker_RED
    Память намного быстрее диска, даже если это SSD или рамдиск.
    Но память намного дороже дисков, и если данных много, то возможно дешевле данные читать из файлов.
    Сравните сколько стоит HDD на 18Тб и сколько стоит сервер с соответствующим объемом.

    Что вы подразумеваете под эффективностью - вам виднее.
    Ответ написан
    4 комментария
  • Почему lottie выдает ошибку ImportError: cannot import name 'PngRenderer' from 'lottie.exporters.cairo'?

    @dima20155
    you don't choose c++. It chooses you
    Да, действительно он там есть
    https://mattbas.gitlab.io/python-lottie/classlotti...
    Проверьте, что у вас правильная версия библиотеки, также можете попробовать импортировать полностью модуль cairo
    Ответ написан
  • Как разбить строку на элементы?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Используйте метод строк .splitlines() либо укажите для метода .split() параметр разделитель ”\n”
    Ответ написан
    1 комментарий
  • Почему так читается текстовый файл?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему-то как я не стараюсь всё записывается только в sportsmens[i].full_name,

    Поскольку ты используешь fscanf, а поля в твоём файле разделены пробелами, формат fscanf должен включать в себя пробелы чтобы избавиться от разделителей. Кроме того, имеет смысл проверить, что setlocale возвращает не-NULL, иначе он не повлияет на десятичный разделитель (и %f не сможет прочитать число с плавающей точкой записанное как 12,12).
    Ответ написан
    4 комментария
  • Почему сайт отклоняет запросы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У тебя - задержка 0.5 секунды. Поставь формулу exponential backoff. Тоесть следующая задержка
    в случае неудачи будет 1 секунда. Потом 2, 4, 8 e.t.c. До тех пор пока HTTP код c 429 не перейдет
    в статус 200(201)
    Ответ написан
    Комментировать
  • Почему сайт отклоняет запросы?

    Vindicar
    @Vindicar
    RTFM!
    сначала всё работает хорошо, но черех некоторе время выдает ошибку

    Как ни странно, сайт подозревает, что твой бот-парсер - это бот-парсер.
    Задержки, которые у тебя прописаны внутри скрипта, никакого значения не имеют. К этому моменту данные уже получены с сайта, и с ним ты больше не взаимодействуешь. Имеет значение интервал между повторными вызовами requests.get(). У тебя в скрипте вызов не повторный, но ты же сам скрипт неоднократно дёргаешь, я так понял?
    Ответ написан
    5 комментариев
  • Как из дочернего процесса вытащить данные?

    Vindicar
    @Vindicar
    RTFM!
    Попробуй использовать Pool.map().
    Пример его использования буквально в самом начале официальной документации.
    Ответ написан
    2 комментария
  • Как убрать ограничение в 500 результатов в gmailAPI для python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Никак, ограничение гугла. Получаете 500 сообщений, достаете из ответа токен следующей страницы, вызываете этот метод опять, добавив параметр pageToken со значением, которое получили.

    как-то так вроде
    messages = []
    next_page_token = None
    
    for _ in range(3):
        if next_page_token:
            msgs = service.users().messages().list(userId='me',maxResults=500, pageToken=next_page_token).execute()
        else:
            msgs = service.users().messages().list(userId='me',maxResults=500).execute()
    
        messages.extend(msgs)
        next_page_token = msgs['nextPageToken']
    Ответ написан
    3 комментария
  • Многопоточность vs асинхронность?

    pazukdev
    @pazukdev
    Java Dev
    Многопоточность vs асинхронность

    Ресторан. Клиент заказал яичницу и гренки. 

    1. Синхронное выполнение: даем задание 1 повару. Он сначала делает яичницу. После того как она готова он приступает к гренкам.

    2. Асинхронное выполнение (многопоточность): даем задание 2 поварам. Они приступают условно одновременно. Один делает яичницу, второй гренки и оба конфликтуют из-за доступа к общим ресурсам (перцу, соли, сковородке).

    3. Асинхронное выполнение (1 поток): даем задание 1 повару. Он ставит на плиту яичницу и ставит таймер. Ставит гренки и тоже ставит таймер. Пока таймеры не сработали, чтобы не терять время, прибирает кухню. После того как сработают оба таймера - отдает заказ.
    Ответ написан
    Комментировать
  • Как читать документацию discord.py?

    Ukrainskiy
    @Ukrainskiy
    Читать можно глазами, например. Документация тут - https://discordpy.readthedocs.io/en/stable/
    Ответ написан
    2 комментария
  • Почему Сайт не видит отправленые сообщения?

    Vindicar
    @Vindicar
    RTFM!
    Причины может быть две.
    1. .tiktok-19dw2t5-DivLayoutContainer выглядит как сгенерированное имя стиля, оно может меняться хоть при каждом открытии страницы.
    2. Более вероятно, аккаунт бота был тихо помечен как спамерский, и теперь его сообщения видит только он сам. Учитывая действия бота, заслуженно, скорее всего.
    Ответ написан
    3 комментария
  • Как парсить именно последнее появившееся сообщение?

    ScriptKiddo
    @ScriptKiddo
    (//p[@class='message-text'])[last()]

    last - возвращает индекс последнего элемента в наборе
    Ответ написан
    2 комментария
  • Как написать сообщение с помощью selenium, если в html коде нету тега input?

    Vindicar
    @Vindicar
    RTFM!
    Можно попробовать так:
    pseudo_input = driver.find_element_by_css_selector(".btn") # ну или что там у тебя за элемент
    ( selenium.webdriver.common.action_chains.ActionChains(driver)
        .move_to_element(pseudo_input)
        .click(pseudo_input)
        .send_keys_to_element(pseudo_input, *keys_to_send)
        .perform()
    )
    Ответ написан
    2 комментария
  • Что делать, если при парсинге selenium находит элемент, но выдает пустые строки?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Поле .text возвращает только видимый текст. Здесь же он появляется после наведение курсора. Здесь текст нужно достать через метод get_attribute('textContent')
    И еще, мне кажется, что лучше парсить каждый блок отдельно. Тогда все будет на месте и никакой путанницы.
    Вообще, все адреса лежат в JS скрипте

    self.shops = self.driver.execute_script('return shopsObj')
    for shop in self.shops:
        print(shop['address'], shop['availability_hint'])


    old
    Сначала найти все строки, которые содержат информацию о магазине:
    self.shops = self.driver.find_elements(By.XPATH, '//div[@class="b-shops-map__shop _other"]')


    В цикле к каждому обратиться и достать нужную инфу:
    self.shops = self.driver.find_elements(By.XPATH, '//div[@class="b-shops-map__shop _other"]')
    
    for shop in self.shops:
        print(shop.find_element_by_class_name('b-shops-map__address-text').text)
        print(shop.find_element_by_class_name('b-shops-map__availability-col-wrapper').find_element_by_class_name('b-tooltip-new__text.s-tooltip-text').get_attribute('textContent').strip())
        print()
    Ответ написан
    7 комментариев