Как быстро Python? [закрытый]

SwingWorker для того, чтобы легко справиться с обратными вызовами пользовательского интерфейса от фоновых потоков.

9
задан kmario23 16 June 2014 в 10:54
поделиться

7 ответов

С точки зрения чистой производительности Python определенно медленнее, чем Java, C # и C / C ++. Однако есть и другие вещи, которые важны для пользователя / наблюдателя, такие как общее использование памяти, время начального запуска и т. Д. Для большинства вещей Python достаточно быстр ;)

Этот сайт позволяет вы сравниваете разные языки программирования друг с другом. Он использует простые гистограммы для отображения скорости, использования памяти и т. Д.

Если вам интересно, вы можете взглянуть на долгожданный проект Unladen Swallow , который стремится повысить производительность Python до в пять раз больше, чем у CPython (!)

29
ответ дан 4 December 2019 в 05:54
поделиться

If you want speed in Python, especially for complex algorithms, Psyco usually helps. From their webpage:

Think of Psyco as a kind of just-in-time (JIT) compiler, a little bit like what exists for other languages, that emit machine code on the fly instead of interpreting your Python program step by step. The difference with the traditional approach to JIT compilers is that Psyco writes several version of the same blocks (a block is a bit of a function), which are optimized by being specialized to some kinds of variables (a "kind" can mean a type, but it is more general). The result is that your unmodified Python programs run faster.

2x to 100x speed-ups, typically 4x, with an unmodified Python interpreter and unmodified source code, just a dynamically loadable C extension module.

Strangely, it hasn't been mentioned in the above links.

4
ответ дан 4 December 2019 в 05:54
поделиться

This totally depends on the usecase. For long running applications (like servers), Java has proven to be extremely fast - even faster than C. This is possible as the JVM might compile hot bytecode to machine code. While doing this, it may take fully advantage of each and every feature of the CPU. This typically isn't possible for C, at least as soon as you leave your laboratory environment: just assume distributing a dozen of optimized builds to your clients - that simply won't work.

But back to your question: it really depends. E.g. if startup time is an issue (which isn't an issue for a server application for instance) Java might not be the best choice. It may also depend on where your hot code areas are: If they are within native libraries with some Python code to simply glue them together, you will be able to get C like performance with Python as well.

Typically, scripting languages will tend to be slower though - at least most of the time.

22
ответ дан 4 December 2019 в 05:54
поделиться

Here's another stackoverflow question that seems more complete: You might also look at the computer language shootout.

4
ответ дан 4 December 2019 в 05:54
поделиться

Очень сложно провести действительно объективное и общее сравнение скорости выполнения двух языков. При сравнении любых двух языков X и Y часто обнаруживается, что X быстрее Y в некоторых отношениях, но медленнее в других. Для меня это делает любые тесты / сравнения, доступные в Интернете, в значительной степени бесполезными. Лучший способ - проверить это самостоятельно и увидеть, насколько быстро каждый язык подходит для той работы, которую вы выполняете.

Сказав это, есть определенные вещи, которые следует помнить при тестировании языков, таких как Java и Python. Код на этих языках часто можно значительно ускорить, используя конструкции, более подходящие для языка (например, понимание списков в Python или использование char [] и StringBuilder для определенных операций String в Java). Более того, для Python использование psyco может значительно повысить скорость работы программы.

2
ответ дан 4 December 2019 в 05:54
поделиться

Это вопрос, на который вы не можете ответить должным образом, потому что все зависит от того, когда нужно действовать быстро. Java хороша для огромных серверов, но плохо, когда вам приходится много раз перекомпилировать и тестировать свой код (компиляция идет оооочень медленно). Python даже не нужно компилировать для тестирования!

В производственной среде совершенно глупо говорить, что Java быстрее, чем C ... это все равно, что говорить, что C быстрее сборки.

В любом случае, ответить невозможно именно: все зависит от того, что вы хотите / нуждаетесь.

0
ответ дан 4 December 2019 в 05:54
поделиться

Я думаю, что ответ Кейла (среди прочего) подводит к основному выводу: очень многое зависит от того, как вы что-то делаете. Эта ссылка дала два ответа для C ++, но мне трудно поверить, что кто-то обычно пишет на C ++, который очень похож на любой из них. Моя первая попытка выглядела бы примерно так:

#include <iostream>
#include <vector>
#include <time.h>

class person { 
    int count_;
    static int current_;
public:
    person() : count_(++current_) {}
    int count() { return count_; }
};
int person::current_ = 0;
typedef std::vector<person> plist;
class chain {
    plist people_;
    void check_wrap(std::vector<person>::iterator &p) {
        if (p==people_.end())
            p = people_.begin();
    }
    void advance(std::vector<person>::iterator &p, int places) {
        for (int i=0; i<places; i++)
            check_wrap(++p);
    }
public:
    chain(int length) : people_(length) {}
    person *kill(int n) { 
        plist::iterator current = people_.begin();
        while (people_.size()>1) {
            advance(current, n);
            current = people_.erase(current);
            check_wrap(current);
        }
        return &(*current);
    }
};
int main() {
    const int ITER = 1000000;  
    clock_t start = clock();
    for(int i = 0 ; i <ITER; i++) {
        chain c(40);
        c.kill(3);  
    }
    clock_t end = clock();
    std::cout << "Time per iterator: " << (((end - start) /(double)CLOCKS_PER_SEC/ITER)*1000000 << " microseconds.\n";
    return 0;
}

(Для переносимости я использовал clock () вместо gettimeofday, но любой, кто захочет, может легко изменить это обратно).

Есть пара моментов по поводу этого удара мне как интересно. Во-первых, код стал на лот короче - фактически, конкурентоспособным, поскольку показанный самый короткий код. Во-вторых, код стал немного быстрее - вероятно, быстрее, чем что-либо, кроме специально оптимизированной версии на C ++.

Наконец, по крайней мере, мне кажется, что код стал немного легче читать и понимать. Мне его 'shout ()' казался довольно запутанным, так как он делал 'Person' действительно узлом в связанном списке объектов Person, при этом Chain обрабатывала часть управления связанными списками, но 'Person' также выполняла связанные- перечислите вещи вместе с вещами «Личность».

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

на самом деле это узел в связанном списке объектов Person, при этом Chain обрабатывает некоторые элементы управления связанными списками, но «Person» также выполняет функции связанного списка вместе с вещами «Person».

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

на самом деле это узел в связанном списке объектов Person, при этом Chain обрабатывает некоторые элементы управления связанными списками, но «Person» также выполняет функции связанного списка вместе с вещами «Person».

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

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

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

1
ответ дан 4 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

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