• Как работать с многоядерными процессорами в Python?

    Sly_tom_cat
    @Sly_tom_cat
    .
    from time import time
    from threading import Thread
    from multiprocessing import Process

    def count(n):
    while n > 0:
    n -= 1

    startTime = time()
    count(100000000)
    count(100000000)
    print('\nSequential execution time : %3.2f s.'%(time() - startTime))

    startTime = time()
    t1 = Thread(target=count, args=(100000000,))
    t2 = Thread(target=count, args=(100000000,))
    t1.start(); t2.start()
    t1.join(); t2.join()
    print('\nThreaded execution time : %3.2f s.'%(time() - startTime))

    startTime = time()
    p1 = Process(target=count, args=(100000000,))
    p2 = Process(target=count, args=(100000000,))
    p1.start(); p2.start()
    p1.join(); p2.join()
    print('\nMultiprocessed execution time : %3.2f s.'%(time() - startTime))

    Дает на 4-х ядерном проце:

    Sequential execution time : 6.83 s.

    Threaded execution time : 11.37 s.

    Multiprocessed execution time : 6.30 s.

    Но допустим распараллеливание запросов к http серверу и в thread варианте даст огромный выигрыш.
    Т.е. без учета специфики задачи - в многопоточность/многопроцессорность - лучше просто не соваться.
    Ответ написан
    1 комментарий
  • В чем преимущество динамически типизированных языков?

    Nipheris
    @Nipheris Куратор тега C++
    Во многих, даже в большинстве задач, где узким местом не является производительность интерпретатора/рантайма языка, основное преимущество одно: на динамических языках могут писать те программисты, которые не могут на статических. Не в смысле не могут выучить или не понимают, а в смысле - совершенно не хотят. Это что-то такое глубокое в сознании программиста, от чего зависит его выбор динамической/статической типизации (и соотв. языка). Я все больше убеждаюсь, что в зависимости от варианта типизации, программисты, выбравшие для себя "правильный" язык, пишут гораздо более эффективный код.
    У меня, как и у того разработчика из Яндекса (по ссылке в ответе beduin01 ), слишком плохая память для разработки на динамическом языке. Я не могу держать много сущностей в своей голове, чтобы эффективно и правильно использовать динамические языки. Я привык и не могу без хоть каких-нибудь проверок на стадии компиляции (и чем больше, тем лучше).
    Другие считают ограничения статической типизации идиотскими, необходимость создавать всякие непонятные "интерфейсы", чтобы поиметь абстракцию и полиморфное поведение - извращением. Они чувствуют себя легко с объектами и классами. Возможность "прикрутить" любое свойство или метод к существующему объекту вдохновляет их на нестандартные и эффективные архитектурные и инфраструктурные решения.
    Видимо это действительно зависит от особенностей памяти и сознания конкретного человека.

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

    @asd111
    На динамических языках пишут там где их скорости достаточно - сайты и т.п., простой десктоп, адм. скрипты и т.п.
    На статических языках пишут только если нужна высокая скорость работы программы.
    Ответ написан
    6 комментариев
  • В чем преимущество динамически типизированных языков?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Питон - это и есть C. Это простой интерфейс к написанным на С/С++ библиотекам.

    Но Питон силен не этим. Питон силен своим Дзен. Где еще вы сможете писать Web, Desktop, Android (а в перспективе и WinPhone и iOS) приожения, зная один язык? Или, например, покодить для CUDA?

    По скорости ничто не быстрее С, тут гадать нечего, всякие Java/Go приближаются и завляют, что на некоторых тестах они "как минимум не хуже", но... вот вам пятилетней давности топик habrahabr.ru/post/90942
    а вот что стало реальностью только в прошлом году: speed.pypy.org и это тоже Дзен Питона

    Что касается "объявлять тип переменных", вы путаете понятия, посмотрите habrahabr.ru/post/161205
    в Питоне очень быстро наткнетесь на проявления строгой типизации (прочитайте из ВЕБ без decode(), например), и еще неясно, кто (Python или C) тут больший ламер
    Ответ написан
    6 комментариев
  • Поддержание максимума в окне?

    @Mercury13
    Программист на «си с крестами» и не только
    Порядок, придумал.

    Создадим список максимальной длины w, в котором содержатся пары (index, value) и value нестрого убывает. Как устроен этот список — разберём позже.

    Сначала список пуст. Сначала w раз проводим операцию «a[i] вошёл». Затем n−w раз — сначала «a[i−w] вышел», затем «а[i] вошёл». Каждый раз list.front — это индекс и значение макс. элемента.

    Операция «a[i] вошёл». С конца списка удаляем все элементы, чей value меньше, чем a[i]. Затем прицепляем пару (i, a[i]) к концу.
    Операция «a[i] вышел». Если в начале списка index=i, удаляем первый элемент. Иначе — ничего не делаем.

    Почему O(n)? Единственное, где сложность неочевидна — удаление в операции «a[i] вошёл». Но удалений будет не больше, чем вставок, а их точно O(n) — так что никаких проблем.

    Ну и на сладкое — как должен быть устроен список.
    — Ограниченная длина (не более w).
    — Удаление из начала.
    — Вставка в конец.
    — Удаление из конца.

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

    wwwater
    @wwwater
    Пройди вот этот курс, он офигенный и многому учит.
    Ответ написан
    Комментировать
  • С какого языка изучать программирования (с нуля)?

    @bromzh
    Drugs-driven development
    Ты ещё не умеешь программировать (и искать в интернете, ведь тут такие вопросы задают минимум по 1 разу в неделю), но уже решил, что питон - это несерьёзный несовременный язык. Видимо по этим причинам он самый популярный язык для обучения в технических вузах США.
    Зачем тебе чужое мнение? Ты вполне самостоятельный!
    Ответ написан
    8 комментариев
  • Как в django добавить в админку возможность изменения одного поля из другого класса?

    aruseni
    @aruseni
    Просто отобразить можно запросто:

    class OrdersAdmin(admin.ModelAdmin):
    
        fields = [
            'customer',
            'customer_address',
            'date',
            'amount_bottle',
            'price',
            'statusOrder'
        ]
        readonly_fields = ['customer_address',]
        list_filter = ['date']
        date_hierarchy = 'date'
    
        def customer_address(self, obj):
            return obj.customer.address
    
        customer_address.short_description = "Customer’s address"

    А вот с редактированием всё сложнее. Представьте себе, например, такую ситуацию — допустим, вы добавили в эту форму поле, которое сохраняется в поле address связанного объекта модели Customer. Но вот какое дело: пользователь в процессе редактирования поля поменял значение поля Customer, и поэтому объект Order связан уже с другим клиентом. Если всё равно сохранить адрес, то получится, что вы перезапишете значение уже для другого объекта, и это, возможно, будет неуместно. Если не сохранить — опять же, это может не быть ожидаемым поведением (может быть, пользователь хотел сохранить именно такой адрес для нового клиента).

    Тут я вижу такие варианты решения: или запрещать редактирование клиента, или прятать поле с адресом, если клиент изенён, или вообще динамически (с помощью JS) подгружать новый адрес при изменении клиента (и блокировать сохранение заказа, пока адрес не подгрузился).

    Если один из таких вариантов вам подходит, то вам нужно отредактировать используемую для страницы редактирования заказа форму, и дополнить обработку этой формы таким образом, чтобы значение поля с адресом сохранялось в поле address связанного объекта Customer.

    Удачи!

    P.S. Замечание по стилю: лучше не OrdersAdmin, а OrderAdmin (тем более, что Customer у вас напиано в единственном числе).
    Ответ написан
    Комментировать
  • Какое key-value хранилище лучше?

    denver
    @denver
    Нет лучшего NoSQL хранилища вообще, есть под задачи, у каждого плюсы и ограничения. Redis супербыстр когда оперативки больше чем данных, иначе он часто подгружает с диска и сводит на нет скорость (если это еще не переделали), хорош для очередей сообщений, списков (встроены сортировки), всякой мелкой инфы. memcache (не memcached) самый быстрый но не флашит на диск ничего (собсвенно оттого и). memcached простейший key-value с флашем (хорош для очередей сообщений и всяких счетчиков). У последних двух особенность multiget — взять много ключей за раз работает столько же сколько и один, так что хорош для хранения «превьюшек» данных по их id, когда сортированные списки хранятся где-то еще (в редис). MongoDB не просто key-value, в ней можно хранить целые документы (пост со всеми комментариями), некий компромисс между nosql и RDBMS. Hbase уже совсем замена RDBMS, один из самых быстрых когда речь идет о IO диска, соответственно эта NoSQL для постоянного хранения стопитцот миллиардов данных. Cassandra похоже конкурент Hbase, но аутсайдер, т.к. фейсбук/твиттер от нее отказываются ;) Про CouchDB и Riak я ничего особенного не слышал (может кто дополнит — мне интересно)
    Ответ написан
    12 комментариев