Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Python) Как ускорить / 5 сообщений из 5, страница 1 из 1
17.11.2014, 00:07
    #38807714
locked
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Python) Как ускорить
есть такая программка, которая вычисляет простые числа
Питон
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
import datetime
import math

dt=datetime.datetime.now()

def GeneratePrimes (Limit):
    candidates = []
    primes = [2,3]
    i = 1

    while  6*i+1 < Limit:
        candidates.append( 6*i-1)
        candidates.append( 6*i+1)
        i += 1

    for i in range(0,len(candidates)):
        is_prime = True
        current_max = math.floor(math.sqrt(candidates[i])+1)

        j = 0
        while  candidates[j]< current_max:
            if candidates[i]%candidates[j] == 0:
                is_prime = False
                break
            j += 1

        if(is_prime):
            primes.append(candidates[i])

    return primes

primes = GeneratePrimes(1000000)

dt1 = datetime.datetime.now()

print len(primes)
print dt1 - dt




результат такой
Код: plaintext
1.
2.
78498
0:00:04.255145

она же но в исполнении node.js
JavaScript
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
dt = new Date();

function GeneratePrimes(Limit)
{
    var candidates = [];
    var primes = [2,3];
    var i = 1;

    while(6*i+1 < Limit)
    {
        candidates.push( 6*i-1);
        candidates.push( 6*i+1);
        i += 1;
    }

    for( i=0; i<candidates.length; i++)
    {
        var is_prime = true;
        var current_max = Math.floor(Math.sqrt(candidates[i])+1);

        var j = 0;
        while( candidates[j] < current_max)
	{
            if( candidates[i]%candidates[j] == 0 )
	    {
                is_prime = false;
                break;
	    }

            j += 1;
	}

        if(is_prime)
	{
            primes.push(candidates[i]);
	}
    }

    return primes;
}

primes = GeneratePrimes(1000000);

var dt1 = new Date();

console.log(primes.length);
console.log( dt1.getTime() - dt.getTime());




дает такой результат
Код: plaintext
1.
2.
78498
181

Вопрос: почему питон настолько медленнее и можно ли его ускорить?
...
Рейтинг: 0 / 0
17.11.2014, 13:07
    #38808170
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Python) Как ускорить
так мы узнаём про JIT
...
Рейтинг: 0 / 0
17.11.2014, 13:42
    #38808258
locked
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Python) Как ускорить
ScareCrowтак мы узнаём про JIT
как им можно воспользоваться?
все что у меня есть Python 2.7.5 поставленный из repo
...
Рейтинг: 0 / 0
17.11.2014, 13:59
    #38808304
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Python) Как ускорить
...
Рейтинг: 0 / 0
17.11.2014, 14:04
    #38808315
locked
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Python) Как ускорить
NekZlocked,

https://pypi.python.org/pypi/hope/0.3.0

спасибо. поставил PyPy 2.2.1 with GCC 4.8.2 из repo

дает приемлемый результат

Код: plaintext
1.
2.
78498
0:00:00.350500

вопрос снят
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Python) Как ускорить / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]