समस्या विवरण:सही बनाम CPython प्रदर्शन PyPy परीक्षण
मैं इस प्रथा है "चेकसम" समारोह:
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
कौन सा मैं दोनों Python3.6 और PyPy प्रदर्शन के लिहाज से पर परीक्षण करना चाहते हैं । मैं देखना चाहता हूं कि समारोह पीपीपी पर बेहतर प्रदर्शन करेगा, लेकिन मुझे पूरा यकीन नहीं है कि यह करने के लिए सबसे विश्वसनीय और साफ तरीका क्या है।
मैं क्या कोशिश की है और प्रश्न:
वर्तमान में, मैं दोनों के लिए timeit
उपयोग कर रहा हूँ:
$ 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
मेरी चिंता का विषय मैं बिल्कुल यकीन है कि अगर timeit
सही है नहीं कर रहा हूँ है की वजह से PyPy
पर नौकरी के लिए टूल।
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)"
क्या सबसे अच्छा और सबसे सटीक दृष्टिकोण इन भर में एक ही सटीक समारोह प्रदर्शन और संभवत: अन्य अजगर कार्यान्वयन परीक्षण करने के लिए किया जाएगा:
इसके अलावा, PyPy ही परीक्षण के परिणाम रिपोर्ट करने से पहले निम्न रिपोर्ट?
बिल्कुल करता है कि परीक्षण (समय) कुछ भी? ऐसा लगता है कि आप केवल एक सेटअप करते हैं और कोई वास्तविक परीक्षण कमांड नहीं करते हैं? – MSeifert
@MSeifert आह, मैं मूर्ख हूँ, आप बिल्कुल सही हैं। वहां केवल वहां स्थापित किया गया था, मैंने प्रश्न के बाद के हिस्से को छोड़कर उत्तर अपडेट किया है। धन्यवाद! – alecxe