Почему python так медленно работает на Raring?

Попробуйте sudo apt-get install plasma-discover вместо sudo apt-get install discover.

$ apt show plasma-discover
Package: plasma-discover
Version: 5.8.8-0ubuntu1~ubuntu16.04~ppa1
Priority: optional
Section: kde
Maintainer: Debian/Kubuntu Qt/KDE Maintainers <debian-qt-
kde@lists.debian.org>
Installed-Size: 1,957 kB
Depends: appstream (>= 0.8), packagekit (>= 1.0), plasma-discover-common (= 5.8.8-0ubuntu1~ubuntu16.04~ppa1), qml-module-org-kde-kirigami, qml-module-org-kde-kquickcontrolsaddons, qml-module-qtgraphicaleffects, ubuntu-release-upgrader-qt, kio, libappstreamqt2, libc6 (>= 2.14), libkf5archive5 (>= 4.96.0), libkf5attica5 (>= 5.23.0), libkf5configcore5 (>= 5.24.0), libkf5configgui5 (>= 4.97.0), libkf5configwidgets5 (>= 4.96.0), libkf5coreaddons5 (>= 4.100.0), libkf5crash5 (>= 5.15.0), libkf5dbusaddons5 (>= 4.99.0), libkf5declarative5 (>= 4.96.0), libkf5i18n5 (>= 4.97.0), libkf5kiocore5 (>= 4.96.0), libkf5kiowidgets5 (>= 4.96.0), libkf5newstuff5 (>= 5.23.0), libkf5notifications5 (>= 5.3.0+git20141030.0311), libkf5service-bin, libkf5service5 (>= 4.96.0), libkf5widgetsaddons5 (>= 4.96.0), libkf5xmlgui-bin, libkf5xmlgui5 (>= 4.96.0), libpackagekitqt5-0, libqt5core5a (>= 5.6.0~beta), libqt5dbus5 (>= 5.0.2), libqt5gui5 (>= 5.6.0~beta) | libqt5gui5-gles (>= 5.6.0~beta), libqt5qml5 (>= 5.1.0), libqt5quick5 (>= 5.0.2) | libqt5quick5-gles (>= 5.0.2), libqt5widgets5 (>= 5.0.2), libqt5xml5 (>= 5.0.2), libstdc++6 (>= 4.5)
Recommends: software-properties-kde
Conflicts: plasma-discover-private, plasma-discover-updater, python3-aptdaemon.pkcompat
Breaks: libmuon (<< 4:5.6), muon-discover (<< 4:5.5.3a), muon-notifier (<< 4:5.5.3a), muon-updater (<< 4:5.5.3a), plasma-discover-common (<< 5.7.0)
Replaces: libmuon (<< 4:5.6), muon-discover (<< 4:5.5.3a), muon-notifier (<< 4:5.5.3a), muon-updater (<< 4:5.5.3a), plasma-discover-common (<< 5.7.0), plasma-discover-private, plasma-discover-updater
Download-Size: 970 kB
APT-Manual-Installed: yes
APT-Sources: http://ppa.launchpad.net/kubuntu-ppa/backports/ubuntu xenial/main amd64 Packages
Description: Discover software management suite
....

Обратите внимание, что у меня есть версия 5.8.8, потому что я установил kubuntu-backports ppa, который обеспечивает множество исправлений ошибок и улучшения по сравнению с тем, что Kubuntu 16.04 первоначально поставляется с.

Если вы полагаетесь на версию по умолчанию, вы увидите версию 5.6.2, если вы запустите apt policy plasma-discover в своем терминале.

-2
задан 21 June 2013 в 18:17

2 ответа

Глядя на ваш код Java, я замечаю, что вы используете int для чисел Фибоначчи. С другой стороны, Python использует произвольную точность .

Также обратите внимание, что числа Фибоначчи не помещаются в переменную int для n > 46! Так что код Java даже не вычисляет числа Фибоначчи для n > 46.

Вы должны изменить int для некоторого большего типа данных (возможно, с произвольной точностью), прежде чем проводить сравнение.

Заключение: Java работает намного быстрее, потому что вычисляет с помощью целых чисел (тип данных фиксированного размера), в то время как Python использует все больше ОЗУ для накопления для постоянно растущих чисел (которые в конечном итоге перестают помещаться в 32-разрядном целое число).

Попробуйте:

#!/usr/bin/python
from time import time

def int32(x):
    x &= 0xffffffff
    if x > 0x7fffffff:
        return - ( ~(x - 1) & 0xffffffff )
    else:
        return x

def fibo(n):
    a,b,i=0,1,0
    while i<n:
        t = a
        a = b
        b = int32(b + t)
        i+=1


if __name__ == "__main__":
    s=time()
    fibo(1000000)
    print round((time()-s)*1000,0),"ms"

, чтобы узнать, сколько примерно времени потребуется, если Python использует целые числа.

0
ответ дан 21 June 2013 в 18:17

Небольшая выдержка из http://www.python.org/doc/essays/comparisons.html должна ответить на ваш вопрос.
Краткий ответ приведен в первом предложении;)

«Обычно ожидается, что программы на Python будут работать медленнее, чем программы на Java, но их разработка занимает гораздо меньше времени. Обычно программы на Python работают в 3-5 раз короче, чем эквивалентные Java-программы. Это различие можно отнести к встроенным высокоуровневым типам данных Python и его динамической типизации. Например, программист Python не тратит время на объявление типов аргументов или переменных, а также мощный полиморфный список и словарь Python типы, для которых богатая синтаксическая поддержка встроена прямо в язык, находят применение почти в каждой программе Python. Из-за типизации во время выполнения среда выполнения Python должна работать тяжелее, чем Java. Например, при оценке выражения a + b , он должен сначала проверить объекты a и b, чтобы выяснить их тип, который неизвестен во время компиляции, а затем вызвать соответствующую операцию сложения, которая может быть перегруженным определяемым пользователем методом. С другой стороны, Java может в формирует эффективное сложение целых чисел или чисел с плавающей запятой, но требует объявления переменных для a и b и не допускает перегрузки оператора + для экземпляров пользовательских классов.

По этим причинам Python гораздо лучше подходит как «клейкий» язык, в то время как Java лучше охарактеризовать как низкоуровневый язык реализации. На самом деле, оба вместе составляют отличную комбинацию. Компоненты могут быть разработаны на Java и объединены для формирования приложений на Python; Python также можно использовать для создания прототипов компонентов, пока их дизайн не будет «усилен» в реализации Java. Для поддержки этого типа разработки в стадии разработки находится написанная на Java реализация Python, которая позволяет вызывать код Python из Java и наоборот. В этой реализации исходный код Python переводится в байт-код Java (с помощью библиотеки времени выполнения для поддержки динамической семантики Python). "

0
ответ дан 21 June 2013 в 18:17

Другие вопросы по тегам:

Похожие вопросы: