Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

183
Views
Probar con precisión el rendimiento de Pypy vs CPython

La descripción del problema:

Tengo esta función personalizada de "suma de comprobación":

 NORMALIZER = 0x10000 def get_checksum(part1, part2, salt="trailing"): """Returns a checksum of two strings.""" combined_string = part1 + part2 + " " + salt if part2 != "***" else part1 ords = [ord(x) for x in combined_string] checksum = ords[0] # initial value # TODO: document the logic behind the checksum calculations iterator = zip(ords[1:], ords) checksum += sum(x + 2 * y if counter % 2 else x * y for counter, (x, y) in enumerate(iterator)) checksum %= NORMALIZER return checksum

Que quiero probar tanto en Python3.6 como en PyPy en cuanto al rendimiento. Me gustaría ver si la función funcionaría mejor en PyPy, pero no estoy completamente seguro de cuál es la forma más confiable y limpia de hacerlo.

Lo que he intentado y la pregunta:

Actualmente, estoy usando timeit para ambos:

 $ python3.6 -mtimeit -s "from test import get_checksum" "get_checksum('test1' * 100000, 'test2' * 100000)" 10 loops, best of 3: 329 msec per loop $ pypy -mtimeit -s "from test import get_checksum" "get_checksum('test1' * 100000, 'test2' * 100000)" 10 loops, best of 3: 104 msec per loop

Mi preocupación es que no estoy absolutamente seguro de si timeit es la herramienta adecuada para el trabajo en PyPy debido a la posible sobrecarga de calentamiento JIT .

Además, el propio PyPy informa lo siguiente antes de informar los resultados de la prueba:

 WARNING: timeit is a very unreliable tool. use perf or something else for real measurements pypy -m pip install perf pypy -m perf timeit -s 'from test import get_checksum' "get_checksum('test1' * 1000000, 'test2' * 1000000)"

¿Cuál sería el enfoque mejor y más preciso para probar exactamente el mismo rendimiento de la función en estas y potencialmente otras implementaciones de Python?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puede aumentar la cantidad de repeticiones con el parámetro --repeat para mejorar la precisión del tiempo. ver:

https://docs.python.org/2/library/timeit.html

over 4 years ago · Santiago Trujillo Report

0

No está del todo claro lo que está tratando de medir. "Rendimiento" puede significar una variedad de cosas según su caso de uso.

  • ¿Está tratando de medir la velocidad bruta de la función una vez que todo se ha calentado (JIT en particular, pero también importaciones de bibliotecas, carga de archivos, etc.)? Entonces probablemente quieras --repeat mucho como sugirió Haroldo_OK. Con suficientes repeticiones, el tiempo dedicado a otras partes de su código se volvería progresivamente "insignificante".
  • ¿Estás midiendo cosas por el bien del aprendizaje o para un caso de uso del mundo real? Si es lo último, probablemente sea una buena idea probar su código en condiciones similares (longitud de las cadenas que está pasando a su función, número de iteraciones, llamadas en caliente/frío de su código...). Mi impresión es que usar la interfaz de python en lugar de la CLI le daría más flexibilidad para medir exactamente lo que está buscando.

Cabe destacar que timeit desactiva la recolección de basura , por lo que si está buscando medidas del "mundo real", tal vez desee volver a activarlo (consulte el enlace para saber cómo hacerlo).

Si está tratando de mejorar la velocidad, usar un generador de perfiles como cProfile que es compatible con Python3.6 y pypy podría ayudar a aislar el código cuya velocidad desea medir.

En realidad no estoy respondiendo a tu pregunta, pero espero que te ayude :)

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!