рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдФрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдФрд░ рдЯреВрд▓ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдПред рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реНрд╕ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЫреБрдЖред
рдЖрдЬ рдореИрдВ рдореИрдиреБрдЕрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ (рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ "рдЯрдХрдЯрдХреА рд╡рд┐рдзрд┐") рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреА рднреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреАред
- рдкрд░рд┐рдЪрдп рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд - рдЖрдкрдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ, рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЙрдкрдХрд░рдг рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
- рдореИрдиреБрдЕрд▓ рдФрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдкрд░реЗрдЦрд╛ - рдЪрд▓реЗрдВ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП
- рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ - рдЙрдкрдХрд░рдг рдФрд░ рдЙрдирдХреЗ рдЖрд╡реЗрджрди
- рдбрд┐рдмрдЧрд┐рдВрдЧ - рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрдм рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдЧрд╛рдбрд╝реА
рдЙрджрд╛рд╣рд░рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдЕрднреНрдпрд╛рд╕ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдПрдХ рд╢рд┐рдХреНрд╖рдг рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╣реЛ рдФрд░ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рди рд╣реЛред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпреВрд▓рд░ рд╣реИ - рдЧрдгрд┐рддреАрдп рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд╣реЗрд▓реА рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛, рдЙрддреНрддрд░ рдХреА рдЦреЛрдЬ рд╡рд░реНрд╖реЛрдВ рддрдХ рдЪрд▓ рд╕рдХрддреА рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдпреВрд▓рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдкрд╣реЗрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд╡рд┐рдЪрд▓рд┐рдд, рдзреНрдпрд╛рди рдФрд░ рдЖрд░рд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдкрдХреЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдЕрдЪреНрдЫреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИредрд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ,
рдХрд╛рд░реНрдп 3 рдХреЛ рд▓реЗрдВ :
13195 рдХреЗ рдкреНрд░рдореБрдЦ рд╡рд┐рднрд╛рдЬрдХ 5, 7, 13 рдФрд░ 29 рд╣реИрдВред
600851475143 рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╡рд┐рднрд╛рдЬрдХ рдХреНрдпрд╛ рд╣реИ?
рд╣рдо рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди "рдорд╛рдереЗ" рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
"""Project Euler problem 3 solve""" from __future__ import print_function import sys def is_prime(num): """Checks if num is prime number""" for i in range(2, num): if not num % i: return False return True def find_prime_factors(num): """Find prime factors of num""" result = [] for i in range(2, num): if is_prime(i) and not num % i: result.append(i) return result if __name__ == '__main__': try: num = int(sys.argv[1]) except (TypeError, ValueError, IndexError): sys.exit("Usage: euler_3.py number") if num < 1: sys.exit("Error: number must be greater than zero") prime_factors = find_prime_factors(num) if len(prime_factors) == 0: print("Can't find prime factors of %d" % num) else: print("Answer: %d" % prime_factors[-1])
рдПрдХ рдЪреМрдХрд╕ рдпрд╛ рдЕрдиреБрднрд╡реА рдкрд╛рдардХ рдореБрдЭреЗ рддреБрд░рдВрдд рдПрдХ рдиреЙрдм рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛ рдФрд░ рджрд┐рдЦрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдЪреНрдЫрд╛ рдорд╛рдирддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВредрдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рдирдВрдмрд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕рдХреЗ рд╡рд┐рднрд╛рдЬрдХ рд╣рдореЗрдВ рдЬреНрдЮрд╛рдд рд╣реЛрдВ:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
19 рдЕрдЬрдЧрд░ euler_3.py 13195
рдЙрддреНрддрд░: 29
рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрддреНрддрд░ 29 рд╕рд╣реА рд╣реИ (рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрдерди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рд╣реБрд░реНрд░реЗ! рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рд╕рдВрдЦреНрдпрд╛ 600851475143 рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдПрдВ:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
85 рдЕрдЬрдЧрд░ euler_3.py 600851475143
рдФрд░ ... рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ред CPU рдЙрдкрдпреЛрдЧ 100% рд╣реИ, рдХрдИ рдШрдВрдЯреЛрдВ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рд╣рдо рд╕рдордЭрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЙрд╕ рдХреЛрдб рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреЗрдХ рдХрд┐рдпрд╛ рдФрд░ рдЙрддреНрддрд░ рд╕рд╣реА рдерд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЯрдХрдЯрдХреА рд╡рд┐рдзрд┐
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рдореИрдВ 13195 рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░реВрдВрдЧрд╛ (рдЬрдм рдЗрд╕рдХрд╛ рдкрд░рд┐рдЪрд╛рд▓рди рд╕рдордп рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ)ред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдо рдпрд╣рд╛рдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реЗ рд░рд╣реЗ рд╣реИрдВ, рд╕рд┐рд░реНрдл рдЬреВрди рдХреЗ рд▓рд┐рдП, рд╣рдо "рдЯрдХрдЯрдХреА рд╡рд┐рдзрд┐" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╣рдо рдХреЛрдб рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ (рдпрджрд┐ рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ, рддреЛ рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВ) рдХрд┐ рд╕рдВрдЦреНрдпрд╛
N рдХреЗ рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
, рдпрд╣ рдЕрдВрддрд░рд╛рд▓
sqrt (N) + 1 ... N-1 рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рд╕рднреА рд╡рд┐рднрд╛рдЬрдХ рдкрд╛рдП рдЧрдП рдЬрдм рдЕрдВрддрд░рд╛рд▓
2 рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐
... sqrt (N) ред рд╣рдо рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (9 рдФрд░ 18 рд▓рд╛рдЗрдиреЗрдВ рджреЗрдЦреЗрдВ):
"""Project Euler problem 3 solve""" from __future__ import print_function import math import sys def is_prime(num): """Checks if num is prime number""" for i in range(2, int(math.sqrt(num)) + 1): if not num % i: return False return True def find_prime_factors(num): """Find prime factors of num""" result = [] for i in range(1, int(math.sqrt(num)) + 1): if is_prime(i) and not num % i: result.append(i) if is_prime(num): result.append(i) return result if __name__ == '__main__': try: num = int(sys.argv[1]) except (TypeError, ValueError, IndexError): sys.exit("Usage: euler_3.py number") if num < 1: sys.exit("Error: number must be greater than zero") prime_factors = find_prime_factors(num) if len(prime_factors) == 0: print("Can't find prime factors of %d" % num) else: print("Answer: %d" % prime_factors[-1])
рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рд╡рд┐рднрд╛рдЬрдХ рд╣рдореЗрдВ рдЬреНрдЮрд╛рдд рд╣реИрдВ:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
19 рдЕрдЬрдЧрд░ euler_3.py 13195
рдЙрддреНрддрд░: 29
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
85 рдЕрдЬрдЧрд░ euler_3.py 600851475143
рдЙрддреНрддрд░- 6857
рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рдЙрддреНрддрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рд╣реА рдирд┐рдХрд▓рд╛, рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ, рд╣рдо рдиреИрддрд┐рдХ рд╕рдВрддреБрд╖реНрдЯрд┐ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдордп (рдПрдХ рдорд┐рдирдЯ рд╕реЗ рднреА рдХрдо рд╕рдордп) рдореЗрдВ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛, рдЙрддреНрддрд░ рд╕рд╣реА рдерд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдЧреЗ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╕рдордп рдореЗрдВ рд░реЛрдХрдирд╛ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИред
рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпреВрд▓рд░ рдХреЗ рд▓реЛрдЧ рдЖрдкрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рдЙрддреНрддрд░ рдФрд░ рд╕рдорд╛рдзрд╛рди рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЯрд╛рд╕реНрдХ 3 рдХреЗ рдЬрд╡рд╛рдм рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ "рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпреВрд▓рд░ рдкреНрд░реЙрдмреНрд▓рдо 3 рдХрд╛ рдЬрд╡рд╛рдм" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬрд╡рд╛рдм рд▓рд┐рдЦрд╛ рд╣реИредрдореИрдиреБрдЕрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ
рд╕рдмрд╕реЗ рдЖрдо рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╣рдо рдпреВрдирд┐рдХреНрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ "рд╕рдордп" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдкрд╣рд▓реЗ):
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
тЮЬ рд╕рдордп рдЕрдЬрдЧрд░ euler_3.py 13195
рдЙрддреНрддрд░: 29
python euler_3.py 13195 3.83s рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0.03s рд╕рд┐рд╕реНрдЯрдо 99% cpu 3.877 рдХреБрд▓
рдФрд░ рдЗрд╕рд▓рд┐рдП (рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рдж):
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
тЮЬ рд╕рдордп рдЕрдЬрдЧрд░ euler_3.py 13195
рдЙрддреНрддрд░: 29
рдЕрдЬрдЧрд░ euler_3.py 13195 0.03s рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0.02s рд╕рд┐рд╕реНрдЯрдо 90% рд╕реАрдкреАрдпреВ 0.061 рдХреБрд▓
рд▓рдЧрднрдЧ 65 рдЧреБрдирд╛ (~ 3.87 рд╕реЗрдХрдВрдб рд╕реЗ ~ 61 рдорд┐рд▓реАрд╕реЗрдХрдВрдб) рддрдХ рддреНрд╡рд░рдг!
рдореИрдиреБрдЕрд▓ рд░реВрдкрд░реЗрдЦрд╛ рднреА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
import time ... start = time.time() prime_factors = find_prime_factors(num) print("Time: %.03f s" % (time.time() - start))
рдкрд░рд┐рдгрд╛рдо:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
85 рдЕрдЬрдЧрд░ euler_3.py 600851475143
рдЙрддреНрддрд░- 6857
рд╕рдордп: 19.811 рдПрд╕
рдпрд╛ рд╡рд┐рд╢реЗрд╖ "
рдЯрд╛рдЗрдорд┐рдЯ " рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬрд┐рд╕реЗ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрд╡реЗрджрди рдЙрджрд╛рд╣рд░рдг:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
10 рдкрд╛рдпрдерди рдПрдо-рдПрдо рдЯрд╛рдЗрдорд┐рдЯ-рдПрди 10 -s'import euler_3 '' euler_3.find_prime_factors (600851475143) '
10 рд▓реВрдк, рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда 3: 21.3 рдкреНрд░рддрд┐ рд▓реВрдк рд╕реЗрдХреЗрдВрдб
рдореИрдиреБрдЕрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХрдм рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ ("рдореЗрд░рд╛ рдХреЛрдб рдЕрдм рдЖрдкрдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ
рдПрдХ рдмреЗрд╣рддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВ!"), рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рджреВрд╕рд░реЗ, рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЧрддрд┐ (20 рд╕реЗрдХрдВрдб!) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЖрдВрдЦ рд╕реЗ" рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ (рд╕реБрдзрд╛рд░ 100 рдмрд╛рд░ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП!)ред
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрддреНрдкрд╛рджрди рдкрд░ рд╕реАрдзреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХреЛрдб рдХреЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдЧреНрд░рд╛рдлрд╝ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдорд╛рдкрд╛ рд╕рдордп рднреЗрдЬрддреЗ рд╣реИрдВ (рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
рдЧреНрд░реЗрдлрд╛рдЗрдЯ рдФрд░
рд╕реНрдЯреИрдЯреНрд╕рдб рдХреЛ рдЧреНрд░реЗрдлрд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ)ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
"""Collect profiling statistic into graphite""" import socket import time CARBON_SERVER = '127.0.0.1' CARBON_PORT = 2003 class Stats(object): """Context manager for send stats to graphite""" def __init__(self, name): self.name = name def __enter__(self): self.start = time.time() return self def __exit__(self, *args): duration = (time.time() - self.start) * 1000
рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
from python_profiling.context_managers import Stats ... with Stats('project.application.some_action'): do_some_action()
рдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреЗрдХреЛрд░реЗрдЯрд░:
"""Collect profiling statistic into graphite""" import socket import time CARBON_SERVER = '127.0.0.1' CARBON_PORT = 2003 def stats(name): """Decorator for send stats to graphite""" def _timing(func): def _wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) duration = (time.time() - start) * 1000
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
from python_profiling.decorators import stats ... @stats('project.application.some_action') def do_some_action(): """Doing some useful action"""
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдХреЛрдб рд╕реЗрдХреНрд╢рди рдХрд╛ рд░рдирдЯрд╛рдЗрдо рдЧреНрд░рд╛рдл рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

рдЬреЛ рд╣рдореЗрд╢рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рд▓рд╛рдЗрд╡ рд╕рд░реНрд╡рд░ рдкрд░ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдпрджрд┐ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдпрд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╢реЗрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдордп рдкрд░ рдврдВрдЧ рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ рдпрд╛ рдЦрд░рд╛рдм рд╣реЛ рдЧрдпрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдХрдореА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╛рдЗрдо рдирдВрдмрд░ "is_prime" рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рджреГрдврд╝рддрд╛ рд╕реЗ рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реЗрдбреНрдпреВрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд░реНрдерд╣реАрди рд╣реЛрдЧрд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред
рдмреЗрд╢рдХ, рдЖрдк рдЧреНрд░реЗрдлрд╛рдЗрдЯ "рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп" рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдирд╛рдИ рдЧрдИ рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрддрд╛ рд╣реВрдВ, рдФрд░ "рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп" рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рд╕реВрдЪрдирд╛ (рдирдореВрдирд╛рдХрд░рдг) рдХрд╛ рд╕рдВрдЧреНрд░рд╣редDjango рдЖрдБрдХрдбрд╝реЗ
рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреНрд░реЗрдлрд╛рдЗрдЯ рдФрд░ рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд┐рдВрдЧ рд╕рд░реНрд╡рд░ (
StatsD ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ рдЧреНрд░рд╛рдлрд╝ рдорд┐рд▓рддреЗ рд╣реИрдВ: рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп, рд╕рд╛рде рд╣реА рдорд╛рдзреНрдпрд┐рдХрд╛ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд░реАрдбрд┐рдВрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓) рдкреНрд░рддрд┐ рдпреВрдирд┐рдЯ рд╕рдордп, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕реНрдЯреИрдЯреНрд╕рдб рдХреЛ рдЬрд┐рдВрдЬреЛ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред
рд╣рдо рдореЙрдбреНрдпреВрд▓ рдбрд╛рд▓рддреЗ рд╣реИрдВ:
Z рдкрд┐рдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ django-рдЖрдБрдХрдбрд╝реЗ-рдореЛрдЬрд╝рд┐рд▓рд╛
рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
INSTALLED_APPS += ('django_statsd',) MIDDLEWARE_CLASSES += ( 'django_statsd.middleware.GraphiteRequestTimingMiddleware', 'django_statsd.middleware.GraphiteMiddleware', )
рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИ! рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдлрд╝ рдорд┐рд▓рддреЗ рд╣реИрдВ:

рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ StatsD рдХреЗ рд╡рд┐рдкрдХреНрд╖:
+ рдЖрд╕рд╛рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
+ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд (рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ)
- рдЫреЛрдЯреА рдЬрд╛рдирдХрд╛рд░реА (рдорд╛рддреНрд░рд╛ / рд╕рдордп)
- рдЧреНрд░реЗрдлрд╛рдЗрдЯ рдФрд░ рд╕реНрдЯреИрдЯрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ (рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)
рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
рдШрдЯрдирд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдХрд░рдг рд╣реИрдВред рдореИрдВ рддреАрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛:
StatProf
рд╢рд╛рдпрдж рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░реЛрдлрд╛рдЗрд▓
рд╕реНрдЯреЗрдЯрдореИрдЯ рд╣реИ ред рд╣рдо рдбрд╛рд▓рддреЗ рд╣реИрдВ:
Install рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рд╕реНрдЯреЗрдЯрд┐рдлрд╝рд╛рдЗрдЯ
рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣:
import statprof ... statprof.start() try: do_some_action() finally: statprof.stop() statprof.display()
рдпрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ (рдкреАрдкреАрдкреА рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг 0.1.2 рдореЗрдВ рдирд╣реАрдВ, рдХреЗрд╡рд▓
рднрдВрдбрд╛рд░ рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ)
import statprof ... with statprof.profile(): do_some_action()
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
85 рдЕрдЬрдЧрд░ euler_3.py 600851475143
% рд╕рдВрдЪрдпреА рд╕реНрд╡
рд╕рдордп рд╕реЗрдХрдВрдб рд╕реЗрдХрдВрдб рдирд╛рдо
44.42 8.63 8.63 euler_3.py:12:is_prime
37.12 7.21 7.21 euler_3.py:11:is_prime
16.90 19.40 3.28 euler_3.py:21:find_prime_factors
0.95 0.18 0.18 euler_3.py:9:is_prime
0.48 0.09 0.09 euler_3.py:13:is_prime
0.06 0.01 0.01 euler_3.py:14:is_prime
0.06 0.01 0.01 euler_3.py:20:find_prime_factors
0.03 0.01 0.01 euler_3.py:23:find_prime_factors
0.00 19.42 0.00 euler_3.py:37: <рдореЙрдбреНрдпреВрд▓>
- рдирдореВрдирд╛ рдЧрдгрдирд╛: 3575
рдХреБрд▓ рд╕рдордп: 19.420000 рд╕реЗрдХрдВрдб
рдЙрддреНрддрд░- 6857
рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рджреЛ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рджреЗрдЦрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛: is_prime рдлрд╝рдВрдХреНрд╢рди (рдЬреЛ рдХрд┐ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ) рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ 12 рдФрд░ 11, рдЙрдирдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рдордп рдХрд╛ рд▓рдЧрднрдЧ 82% рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛: find_prime_factors рдлрд╝рдВрдХреНрд╢рди рдХреА рд▓рд╛рдЗрди 21 (рд╕рдордп рдХрд╛ рд▓рдЧрднрдЧ 17%):
if is_prime(i) and not num % i:
рдпрд╣ рдЗрд╕ рдкрдВрдХреНрддрд┐ рд╕реЗ рд╣реИ рдХрд┐ is_prime рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╕рдмрд╕реЗ рдЧрд░реНрдо рдХрд╛рд░реНрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╕ рд╣рд╛рд▓рдд рдореЗрдВ рдСрдкрд░реЗрдВрдбреНрд╕ рдХреЛ рдмрджрд▓рдХрд░, рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЧрддрд┐ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╢реЗрд╖ (рд╕рдВрдЦреНрдпрд╛рддреНрдордХ% i) рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди "is_prime" рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдХреНрд╕рд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╢реЗрд╖ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ "рд╕рдВрдЦреНрдпрд╛% i" рдХреЛ рдЧрд▓рдд рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо is_prime рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрд╣реБрдд рдХрдо рдХрд░ рджреЗрдВрдЧреЗ:
if not num % i and is_prime(i):
рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
85 рдЕрдЬрдЧрд░ euler_3.py 600851475143
% рд╕рдВрдЪрдпреА рд╕реНрд╡
рд╕рдордп рд╕реЗрдХрдВрдб рд╕реЗрдХрдВрдб рдирд╛рдо
87.50 0.22 0.22 euler_3.py:21:find_prime_factors
5.00 0.01 0.01 euler_3.py:20:find_prime_factors
5.00 0.01 0.01 euler_3.py:11:is_prime
2.50 0.01 0.01 euler_3.py:23:find_prime_factors
0.00 0.25 0.00 euler_3.py:37: <рдореЙрдбреНрдпреВрд▓>
- рд╕реИрдВрдкрд▓ рдХрд╛рдЙрдВрдЯ: 40
рдХреБрд▓ рд╕рдордп: 0.250000 рд╕реЗрдХрдВрдб
рдЙрддреНрддрд░- 6857
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рдмрд╕реЗ рдЧрд░реНрдо рд╕реНрдерд╛рди рдЕрдм рдлрд╝рдВрдХреНрд╢рди "find_prime_factors" рдХреА рдкрдВрдХреНрддрд┐ 21 рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╢реЗрд╖ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди ("рд╕рдВрдЦреНрдпрд╛% i")ред рдлрд╝рдВрдХреНрд╢рди "is_prime" рдЕрдм рдмрд╣реБрдд рдХрдо рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рдиреЗ рдХреЗ рд╕рдордп рдХрд╛ рдХреЗрд╡рд▓ 5%ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдордп рдХрд╛рдлреА рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ 600851475143 рдирдВрдмрд░ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╕рд░рд▓ рд╡рд┐рднрд╛рдЬрдХ рдЕрдм рдХреЗрд╡рд▓ 0.25 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ (рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓рдЧрднрдЧ 80 рдмрд╛рд░ рддреЗрдЬ рдХрд┐рдпрд╛)ред
рдЖрдЗрдП рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдСрдкрд░реЗрд╢рди рдХреА рд╕рдЯреАрдХрддрд╛ рдХрд┐рддрдиреА рдХрдо рд╣реЛ рдЧрдИ рд╣реИ: 3575 рдирдореВрдиреЛрдВ (рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ) рдХреЗ рдмрдЬрд╛рдп, рдХреЗрд╡рд▓ 40 рдорд╛рдк рд▓рд┐рдП рдЧрдП рдФрд░ рдХреЗрд╡рд▓ рдкрд╛рдВрдЪ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИред рдмреЗрд╢рдХ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рджрд░рдЕрд╕рд▓, рдпрд╣ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реНрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╕рдордп рд╣рдо рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрддрдирд╛ рд╣реА рд╕рдЯреАрдХ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рджрд╕ рдпрд╛ рд╕реМ рдмрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдпрд╛, рддреЛ рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗред
рдпрд╣рд╛рдВ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛редрд╕рднреА рд╕рд╣рд╛рдпрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ 99%, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдпрд╛ рдХреЛрдб
рдХрд╡рд░реЗрдЬ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг, рд╕реВрдЪрдирд╛ рдХреА рдиреНрдпреВрдирддрдо рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдо рдХреЛрдб рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХреЙрдореНрдкреИрдХреНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
result = foo() if bar else baz()
рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреМрди рд╕рд╛ рдирд╣реАрдВ рдерд╛ред рдФрд░ рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд╣рдордиреЗ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдпрд╛ рд╡рд╣ рдкрд░рд┐рдХреНрд╖рдг рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдФрд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреЛрдб рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рдЕрднреА рднреА рдмреЗрд╣рддрд░ рд╣реИ:
if bar: result = foo() else: result = baz()
рдФрд░ рдлрд┐рд░ рд╣рдо рддреБрд░рдВрдд рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреМрди рд╕реА рд▓рд╛рдЗрдиреЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИрдВ, рдФрд░ рдХреМрди рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реИрдВ (рдФрд░ рдХрд┐рддрдиреА рдмрд╛рд░)ред рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯреАрдиреЗрд╕ рдЕрдЪреНрдЫреЗ рдФрд░ рдордЬрд╝реЗрджрд╛рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдФрд░ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓, рдкрд░реАрдХреНрд╖рдг рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред
рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд▓рд╛рдн рдФрд░ рд▓рд╛рдн:
+ рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдб
+ рдЖрд╕рд╛рди рдЙрдкрдпреЛрдЧ
- рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рдХрдЪреНрдЪрд╛ рдФрд░ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ
- рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП, рдПрдХ рд▓рдВрдмреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рдереЛрдбрд╝рд╛ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ
Django-рд▓рд┐рд╡-рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдПрдХ рдЕрд▓рдЧ рдмрд┐рдВрджреБ
django-live-profiler рд╣реИ - рд╕реНрдЯреЗрдЯреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ Django рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ред рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ
zeromq рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
тЮЬ рдХрд╛рдврд╝рд╛ рд╕реНрдерд╛рдкрд┐рдд zmq
рд╣рдордиреЗ рдореЙрдбреНрдпреВрд▓ рдЦреБрдж рд░рдЦрд╛:
ред рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд django-live-profiler
рдФрд░ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдЪрд▓рд╛рдПрдВ:
тЮЬ рдПрдЧреНрд░реАрдЧреЗрдЯреЗрдб --рд╣реЛрд╕реНрдЯ 127.0.0.1 --рдкреЛрд░реНрдЯ 5556
рдЕрдЧрд▓рд╛, рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рднреЗрдЬреЗрдВред
рдФрд░ urls.py рдореЗрдВ:
url(r'^profiler/', include('profiler.urls'))
рд╣рдо рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
N рдЕрдЬрдЧрд░ рдкреНрд░рдмрдВрдзрди рдУрд░реЗрдХрд▓ рд░рдирд╡реЗрд╡рд░ - рдиреЙрд░реЗрд▓реИрдб - рдирд┐рдереНрд░реЗрдбрд┐рдВрдЧ
рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ:
127.0.0.1 : 8000 / рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ / рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд▓рд╛рдЗрд╡ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдХрд░ рдЬреАрд╡рди рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ:

рдФрд░ django-live-profiler SQL рдХреНрд╡реЗрд░реА рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ:

Django-live-profiler рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди:
+ рдЫреЛрдЯрд╛ рдУрд╡рд░рд╣реЗрдб
+ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ)
+ SQL рдХреНрд╡реЗрд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ
- рдЬрдЯрд┐рд▓ рд╕реНрдерд╛рдкрдирд╛, рдирд┐рд░реНрднрд░рддрд╛
- рдереЛрдбрд╝рд╛ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ
рдЦрдЯрдЦрдЯрд╛рдиреЗ рд╕реЗ
рдПрдХ рдЕрдиреНрдп рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ
рдкреНрд▓реЙрдк (рдкрд╛рдпрдерди рд▓реЛ-рдУрд╡рд░рд╣реЗрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рд░) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдЦрдХ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдЪреНрдЪрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рд╣реИред рд╕реНрдерд╛рдкрдирд╛ рддреБрдЪреНрдЫ рд╣реИ:
тЮЬ рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдкреНрд▓реЙрдк рдмрд╡рдВрдбрд░
рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
rudnyh @ рдХрд╛рдо : ~ / рдХрд╛рдо / рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ (venv: рдЕрдЬрдЧрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ )
тЮЬ рдкрд╛рдпрдерди -m plop.collector euler_3.py 600851475143
рдЙрддреНрддрд░- 6857
рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ /tmp/plop.out рдкрд░ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛
рдУрд╡рд░рд╣реЗрдб 5.89810884916e-05 рдкреНрд░рддрд┐ рдирдореВрдирд╛ (0.00589810884916%) рдерд╛
рд╣рдо рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
On рдЕрдЬрдЧрд░- m plop.viewer - рджрд╛рддрд╛рджрд┐рд░ = / tmp /
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ
http: // localhost: 8888 / рдкреГрд╖реНрда рдЦреЛрд▓реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ:

рдкреНрд▓реЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ Django рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, django-plop рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
тЮЬ рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд django-plop
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдордзреНрдп-рджрд┐рд╢рд╛ рдореЗрдВ рд░рдЦреЗрдВред
MIDDLEWARE_CLASSES += ( 'django-plop.middleware.PlopMiddleware', ) PLOP_DIR = os.path.join(PROJECT_ROOT, 'plop')
рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЧреНрд░рд╛рдл рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

рдЪрд┐рддреНрд░ рдХрд╛рдлреА рд╕рд╛рдЗрдХреЗрдбреЗрд▓рд┐рдХ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдЧрдВрднреАрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдЯреВрд▓ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЙрд▓ рдЧреНрд░рд╛рдлрд╝ рд╣реИ, рдХреЛрдб рдХреЗ рд╕рдмрд╕реЗ рдЧрд░реНрдо рднрд╛рдЧ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдУрд╡рд░рд╣реЗрдб рдиреНрдпреВрдирддрдо рд╣реИ (рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЗрд╡рд▓ 2%), рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЯреВрд▓ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХреЛрдб рдХреА рдЬрд░реВрд░рдд рд╣реИ рд░реВрдкрд░реЗрдЦрд╛ред
рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рд╕реЗрд╡рд╛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕реАрдзреЗ рдкреНрд▓реЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рддреА рд╣реИред
рдкреНрд▓реЙрдк рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди:
+ рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдб
+ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдЬрдЯрд┐рд▓ рд╕реНрдерд╛рдкрдирд╛, рдирд┐рд░реНрднрд░рддрд╛
- рдмрд╣реБрдд рдХрдо рдЖрдЙрдЯрдкреБрдЯ
рдирдпрд╛ рдЕрд╡рд╢реЗрд╖
рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рдХреЛрдИ рднреА
рдирдИ рдЕрд╡рд╢реЗрд╖ рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рди рдХреЗрд╡рд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд░реНрд╡рд░ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рд╕рд╛рде рд╣реА рдореЛрдмрд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг) рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рднреА рд╣реИред рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рдХрдВрдкрдиреА рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореБрдлреНрдд рдореЗрдВ рд╕реЗрд╡рд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдиреНрдпреВ рд░реЗрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрджрдд рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЦреБрдж рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
рдкреГрд╖реНрда рдкрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдЦреЗрдВред
рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди:
+ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЗрд░рд╛рджрд╛
+ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп (рдХреЗрд╡рд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдирд╣реАрдВ)
- рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ)
- рдбреЗрдЯрд╛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдШрдЯрдирд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рдЕрдзреНрдпрдпрди рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ - рдкрд╛рдпрдерди рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЙрдкрдХрд░рдгред рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд░рд╣реЗрдВ!