• В чём ошибка при подключении к базе данных?

    deepblack
    @deepblack Куратор тега Python
    Это известная проблема
    Используйте psycopg2 вместо python-postgres
    Ответ написан
    Комментировать
  • С помощью каких приложений объяснить ребенку (9 лет) python?

    neatsoft
    @neatsoft
    Life is too short for bad software
    1. Установить на планшет ScratchJr, объяснить базовые принципы
    2. Показать Scratch, предложить выполнить в нем несколько заданий умеренной сложности
    3. Вместе написать простую игру на Pygame, например, Whack a Mole
    4. Вместе освоить управление Minecraft с помощью Python на Raspberry Pi
    5. Показать JavaScript-HTML-CSS и Developer Tools в браузере
    6. Рассказать про нативные приложения для мобильных платформ
    7. Рассказать про фреймворки (например, Django и Vue), базы данных, сетевое взаимодействие
    8. Построить и запрограммировать модели из LEGO Mindstorms EV3 (он "огороженный", тормознутый, устаревший, но детям по прежнему нравится)
    9. Рассказать про микроконтроллеры, вместе собрать что-нибудь с помощью Амперка Матрешка или Амперка Йодо
    При потере интереса на любом из этапов оставить ребенка в покое
    Ответ написан
    Комментировать
  • Как изменить кодировку docker postgresql?

    Вы не правильно environment задаете. Исправьте так:
    environment:
          - LANG=ja_JP.eucJP
          - LANGUAGE=ja_JP.eucJP
          - LC_ALL=ja_JP.eucJP
          - POSTGRES_INITDB_ARGS='-E EUC_JP'
    Ответ написан
  • Как смириться с тем, что нельзя убирать плохой код на проекте?

    Zoominger
    @Zoominger
    System Integrator
    Ну, коль вы сеньор, то взять и всё исправить. Ах, вы не сеньор? Ну тогда не умничать.
    Простити за грубость. Работает - не трогай.
    Ответ написан
    3 комментария
  • В чём отличие атомарной операции от транзакции?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    Если я правильно помню про peewee, то эти две функции делают одно и тоже но предоставляя различные варианты управления транзакцией, атомик автоматичен а транзакшн даёт возможность управления коммитом/откатом и обработка ошибок.
    Для записи в несколько таблиц можно использовать вложенные транзакции но тут я уже вообще не помню как там реализованно.
    Ответ написан
    5 комментариев
  • Почему возникает ошибка " 'float' object is not iterable"?

    netpastor
    @netpastor
    Python developer
    data = [[1.2,5.5,3.3],[2.2,4.4,7.7]]
    size = sum(row[0] for row in data)
    print(size)
    Ответ написан
    Комментировать
  • Как проверить, принадлежит ли пользователю паблик через его токен?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Метод groups.getMembers() с фильтром filter=managers доступен только Администраторам сообщества.

    Не делайте получение токена через просьбу скопировать адресную строку. Это плохая практика.
    Ответ написан
    3 комментария
  • Можно ли гарантированно записать информацию в две базы данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    отключение света или kill процесса,

    Отдельно обращаю пристальное внимание на настройки редиса. Он не запишет данные с настройкой fsync по-умолчанию. Дефолтный fsync для AOF режима лога записи у него - раз в секунду. То есть все данные до секунды работы длительности вы можете потерять при крахе ОС.

    Redis не поддерживает протокол двухфазного коммита. И вы не можете сделать durable fsync в два места атомарно.
    Поэтому просто это никак не сделать.
    Что сделать можно - переделать логику, чтобы одна из баз могла при аварии привести данные в консистентный вид используя данные ведущей базы.
    Ответ написан
    Комментировать
  • Redis vs SQLite vs PostgreSQL

    CKOPOBAPKuH
    @CKOPOBAPKuH
    Молоток vs Кувалда vs Отвёртка

    Я решил выяснить, какой из инструментов лучше. Представил одинаковую задачу — ударять себя по большому пальцу ноги. Отвёртку решил держать за ручку и ударять наконечником, так как неудобно держать за наконечник и ударять ручкой. Для молотка и кувалды это одинаковые схемы. Запросы: ударить по большому пальцу и измерить время, сколько болит.

    Результат: если ударить больно, то палец болит. В чём же тогда прелесть отвёртки? Понимаю, что она подходит для узконаправленных задач, например, только откручивание или закручивание, т.е. для ограниченных задач. В остальном одни минусы: и держать неудобно, и площадь поражения невелика, и по пальцу я попал только с третьего раза.

    PS: Что вы используете для надёжного перманентного отбивания пальцев? Холивар классический русский молоток vs молоток из икеи можно опустить, разницы между ними практически не будет.
    Ответ написан
    4 комментария
  • Почему docker-scrapyd использует Python 2.7, вместо Python 3.7?

    chupasaurus
    @chupasaurus
    Сею рефлекторное, злое, временное
    Гипотеза: потому что образ на основе Debian и всё устанавливается через pip вместо pip3.
    Ответ написан
    2 комментария
  • Как эффективно использовать Docker + Docker-compose при разработке?

    @de1m
    Как-то вы не очень разобрались.
    Выкиньте "networks:". В вашем случае он не нужен.
    Добавте "ports", там где вы хотите пользоваться пользоваться сервисом. К примеру в postgresql контейнере.
    Вот этот файл ".env" выкиньте его тоже, если у вас не много переменных впишите их так.

    Вообще делать контейнер для не доконца работающей программы слысла нет. Можно поднять базу данных и всякие вдругие сервисы, а саму программу запускать локально и пусть она обращается к тому, что крутся в контейнерах. Когда будет готова первая версия, её можно уже будет завернуть в контейнер.
    Ответ написан
    Комментировать
  • Как эффективно использовать Docker + Docker-compose при разработке?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    но к ним нельзя подключиться извне (из-за использования networks, а как открыть нетворк -
    догадаться нужно самому)

    А через директивы ports - разве не прокидываются нужные порты из контейнеров наружу?

    При внесении каких-то изменений в основное приложение
    можно лишь надеяться что они когда-то появятся в контейнере

    Если вы вносите изменения в проект который примаплен через volume - то контейнер их тут же видит.
    Умеет ли ваше приложение видеть что локальные файлы изменились, и применять их - это уже другой вопрос.
    Но даже если не умеет - нет никаких проблем перестартануть нужный контейнер после внесения каких-либо изменений.

    Можно пять раз удалить контейнер с приложением, потом десять раз удалить образ
    никакие изменения никуда не попадут.

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

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

    Ну тут определиться - используете докер для этого, или виртуальное окружение на своей машине.
    Если хотите одновременно использовать и то и другое - прокидывайте порты.
    Ответ написан
    3 комментария
  • Можно ли сделать мобильное приложение (игру) для вк так, чтобы пользователю не пришлось ничего устанавливать?

    GavriKos
    @GavriKos
    Можно. В Вконтакте есть раздел "игры". Ничего там устанавливать не надо. +погуглите InstantGames (не уверен насчет поддержки со стороны вк)
    Ответ написан
    Комментировать
  • Возможна ли прозрачная переадресация https ---> [http | https]?

    Lynn
    @Lynn
    nginx, js, css
    Весь смысл HTTPS ровно в том, что бы такое было невозможно.
    Ответ написан
  • Проблема с def. После цикла for нечего не работает, как исправить?

    Незначительные модификации и текущий код вполне работает. По крайней мере он выполняется, выводит обе строки и завершается. Что он должен делать на самом деле мне не понятно.
    import asyncio
    
    async def fitler(x):
        b = 0
        print('Сообщение приходит')
        for i in x:
            if i == '-':
                b = 1
            if b == 1:
                c = c + 1
                if i == 'пример':
                    a = a + 1
                    j = 3
                else:
                    f = f + 1
        print('Сообщение не выводится')
        
    asyncio.get_event_loop().run_until_complete( fitler('Я пишу пример, тут есть слово пример'))

    5cdb15259cd25346744533.png
    https://repl.it/repls/AdventurousWorseDisplaymanager

    И я бы не рекомендовал погружаться в асинхронный код, пока вы ещё не твердо разобрались с основами python
    Ответ написан
    Комментировать
  • Как процессы распределяются между ядрами?

    xozzslip
    @xozzslip
    вопросом распределения процессов между ядрами занимается планировщик операционной системы. как конкретно распределятся процессы заранее сказать сложно: это зависит от текущей нагрузки, от того, какой конкретно код будет выполняться, от реализации планировщика.

    в конкретно вашем примере процессы сразу засыпают. то есть они почти не требуют процессорного времени, поэтому не исключено, что они могут выполняться хоть на одном ядре по очереди уходя в sleep. Другое дело если бы код каждого процесса что-нибудь вычислял, тогда можно было бы ожидать, что занимались бы все 4 ядра, попеременно обслуживая все 5 процессов.

    настоящий параллелизм доступен. GIL не блокирует одновременное выполнение процессов. только одновременное выполнение потоков.
    Ответ написан
    Комментировать
  • Как перейти из инженера в программисты?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Из того, что мне кажется наиболее реальным - это программирование контроллеров для инженерных систем зданий

    Замечательное решение, даже добавить нечего.
    Главное, в веб не идите.
    Ответ написан
    6 комментариев
  • Чем обусловлена такая разница в асинхронной обработке запросов?

    @lega
    1) Отличие этих 2-х результатов это "Data transferred:", второй вариант передал в 10 раз больше данных, значит больше работы - меньше rps - т.е. тесты не эквивалентны

    2) если вам не надо ждать результат то не используйте await, тогда завершить запрос можно будет быстрее

    в целом create_task не даст вам большую производительность, а асинхронный вызов не может занимать ни 3 ни 7 сек, скорее у вас код блокирующий или тормозной, и ни asyncio ни aiohttp тут не причем.

    PS: asyncio + uvloop могут выдавать до 100к rps на среднем ноутбуке в один поток, поэтому не это причина ваших 150rps

    --- тест asyncio + uvloop + httptools на среднем ноутбуке
    Результат: 123krps, и max latency 6.74ms

    Запуск wrk:
    $ docker run --rm -it --network=host williamyeh/wrk -c 200 -d 10 http://localhost:8888/

    Результат:
    Running 10s test @ http://localhost:8888/
      2 threads and 200 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency     1.59ms  404.50us   6.74ms   58.61%
        Req/Sec    62.18k     7.51k   74.02k    68.00%
      1237743 requests in 10.06s, 47.22MB read
    Requests/sec: 123044.52
    Transfer/sec:      4.69MB

    import asyncio
    import uvloop
    from httptools import HttpRequestParser
    
    class RpcProtocol(asyncio.Protocol):
        def connection_made(self, transport):
            self.transport = transport
            self.parser = HttpRequestParser(self)
    
        def connection_lost(self, exc):
            self.transport = None
    
        def data_received(self, data):
            self.parser.feed_data(data)
    
        def on_message_complete(self):
            #if self.url == b'/hello':
            response = b'HTTP/1.1 200 OK\nContent-Length: 5\n\nHello'
            self.transport.write(response)
    
            if not self.parser.should_keep_alive():
                self.transport.close()
                self.transport = None
    
    if __name__ == '__main__':
        loop = uvloop.new_event_loop()
        asyncio.set_event_loop(loop)
        coro = loop.create_server(RpcProtocol, '127.0.0.1', 8888)
        loop.run_until_complete(coro)
        loop.run_forever()
        loop.close()
    Ответ написан
  • (Python) Как правильней и проще организовать хранение словарей?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    dict_list = [{'https': addr} for addr in all_https_proxy]
    Ответ написан
    Комментировать
  • Как удалить сообщения в беседе в ВК через VK API?

    @StockholmSyndrome
    такого метода нет, но мы не отчаиваемся и делаем так:

    с помощью messages.getHistory и execute получаем все сообщения беседы по 5000 за запрос
    код для execute будет примерно такой (лучше минифицировать для скорости):
    var peer_id = 2000000001; // идентификатор беседы
    var results = [];
    var i = 0; 
    var offset = 0; 
    while (i < 25) {
      results.push(API.messages.getHistory({peer_id: peer_id, count: 200, offset: offset}));
      i = i + 1;
      offset = offset + 200;
    }
    return results@.items;

    результатом будет массив из 25 массивов объектов сообщений
    при этом с каждым запросом нужно увеличивать offset на 5000

    затем перебираем эти массивы объектов, и если поле from_id равно идентификатору админа беседы, то добавляем поле id в какой-нибудь массив message_ids

    когда все message_ids будут собраны, просто отправляем их в метод messages.delete с параметром delete_for_all=1

    отправлять запросы execute'ом нужно до тех пор, пока длина массивов не станет нулевой

    P.S. забыл обломать — сообщение можно удалить для всех только в течение 24 часов после написания, увы…
    Ответ написан
    Комментировать