habe mal ein wenige mit Nuitka rumgespielt. Und mich über die nicht vorhandene Geschwindigkeit (bei meinem Test) gewundert.
Der Testcode ist ein Test auf Primzahlen aus der Python Doku zu concurrent.futures (Link):
Code: Alles auswählen
import math
PRIMES = [
112272535095293,
112582705942171,
112272535095293,
115280095190773,
115797848077099,
1099726899285419,
777777722155555333,
777777722155555335,
9999999900000001,
2327074306453592351,
2327074306453592353]
def is_prime(n):
if n % 2 == 0:
return False
sqrt_n = int(math.floor(math.sqrt(n)))
for i in range(3, sqrt_n + 1, 2):
if n % i == 0:
return False
return True
def main():
for number in PRIMES:
prime = is_prime(number)
print('{} is prime: {}'.format(number, prime))
if __name__ == '__main__':
main()
CPython 3.5: 3 min 23 s
CPython 3.5 + concurrent.futures.ProcessPoolExecutor: 2 min 15 s
PyPy3.5 v5.10.0: 0 min 24 s
Cython+gcc: 2 min 39 s
Nuitka: 3 min 7 s
PyPy ist als drastisch schneller als alles andere. Nur ist Nuitka ja kaum schneller als CPython. Hat dafür jemand eine Erklärung? Ist mein (zugegebener Maßen simpler) Test "schlecht"? Wobei das andere kompilierte Programm mit Cython+gcc ja eine ganze Ecke schneller ist (aber immer noch drastisch langsamer als Nuitka). Übersetzt habe ich mit `nuitka --standalone prime_code_linear.py`.
Gruß, noisefloor