Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Timeit ใน Python พร้อมตัวอย่าง?


Python มีหลายวิธีในการวัดเวลาของการดำเนินการสำหรับโค้ดหลาม วิธีหนึ่งคือการใช้ python inbuilt time module และประหยัดเวลาก่อนและหลังการทำงานของโปรแกรม?

การจับเวลา Python

เมื่อบางโปรแกรมกำลังทำงาน กระบวนการจำนวนมากยังทำงานในพื้นหลังเพื่อทำให้โค้ดนั้นสามารถเรียกทำงานได้ โมดูลเวลาไม่นับเวลาดำเนินการในเบื้องหลังของกระบวนการ อย่างไรก็ตาม หากคุณต้องการเวลาที่แม่นยำในการวัดประสิทธิภาพ ให้โมดูลดำเนินการ

โมดูล timeit เรียกใช้โค้ดประมาณ 1 ล้านครั้ง (ค่าเริ่มต้น) และคำนึงถึงระยะเวลาขั้นต่ำที่ใช้ในการเรียกใช้โค้ดนั้น

รับเวลาดำเนินการ Python โดยใช้ timeit

เราสามารถใช้โมดูล timeit ได้หลายวิธี วิธีที่ง่ายที่สุดวิธีหนึ่งคือใช้โดยตรงบน python CLI

ตัวอย่าง

เราจะเริ่มใช้ python CLI กับโมดูล timeit ก่อน เมื่อใช้ CLI เราจะสังเกตเห็นว่าโมดูลเองกำหนดจำนวนการทำซ้ำที่เกิดขึ้นสำหรับโค้ดชิ้นเดียวกัน

ตัวอย่างที่ 1

C:\Users\rajesh>python -m timeit "'-'.join(str(n) for n in range(200))"
1000 loops, best of 3: 290 usec per loop

C:\Users\rajesh>python -m timeit "'-'.join(str(n) for n in range(200))"
1000 loops, best of 3: 292 usec per loop

C:\Users\rajesh>python -m timeit "'-'.join(str(n) for n in range(200))"
1000 loops, best of 3: 294 usec per loop

ตัวอย่างที่ 2

ต่อไปเราจะแนะนำ timeit ด้วยตัวอย่างง่ายๆ แต่ก่อนอื่นเราต้องนำเข้าโมดูล timeit ด้วยคำสั่ง "import timeit" นี่เป็นสิ่งจำเป็นในกรณีที่เราไม่ได้ใช้ไวยากรณ์บรรทัดคำสั่งเหมือนข้างบน

#Import timeit module
import timeit

# The instructions being timed.
print('x' * 5)
print('x' + 'x' + 'x' + 'x' + 'x')

# Call timeit on the statements and print the time returned.
# ... Specify optional number of iterations.
print(timeit.timeit("y = 'x' * 3", number=10000000))
print(timeit.timeit("xy = 'x' + 'x' + 'x' + 'x' + 'x'", number = 10000000))

ด้านบน เราส่งคำสั่งในสตริงที่ยกมาไปยังเมธอด timeit.timeit จากนั้นเราเพิ่มการวนซ้ำโดยระบุอาร์กิวเมนต์ตัวเลข

ผลลัพธ์

ครั้งแรกที่รันโปรแกรมด้านบน สร้างเอาต์พุต:

xxxxx
xxxxx
0.9041136896626635
0.7712796073957123

ครั้งที่สองในการรันโปรแกรมด้านบน สร้างเอาต์พุต:

xxxxx
xxxxx
0.7317015874427751
0.7312688195585995

ครั้งที่สามในการรันโปรแกรมด้านบน, สร้างเอาต์พุต:

xxxxx
xxxxx
0.7240862411172824
0.7255863890794246

เราดำเนินการโปรแกรมข้างต้นหลายครั้ง (3 ครั้ง) และเห็นว่ามีการลดลงเป็นเวลาดำเนินการ แทนที่จะทำด้วยตนเอง เรามาทำซ้ำผ่านโปรแกรมกันดีกว่า:

#Import timeit module
import timeit
# Call timeit on the statements and print the time returned.
# ... Specify optional number of iterations.
print(timeit.repeat("y = 'x' * 3", number=10000000, repeat = 5))
print()
print(timeit.repeat("xy= 'x' + 'x' + 'x' + 'x' + 'x'", number = 10000000, repeat = 5))

ผลลัพธ์

[0.7303736343436382, 0.7213687552991258, 0.7362311105941466, 0.7293136666273243, 0.7278277732068212]

[0.7388334197158559, 0.7378481457977326, 0.9486733868277772, 0.735295442480929, 0.7398226849056382]

เรียกใช้คำสั่งหลายคำสั่งโดยใช้โมดูล timeit:

เราสามารถใช้หลายคำสั่งกับโมดูล timeit เราแยกแต่ละประโยคโดยใช้เครื่องหมายอัฒภาค แม้ว่าจะไม่ใช่วิธีที่ดีที่สุดในการเขียนโค้ดแต่ช่วยในการระบุส่วนย่อยของโค้ดที่ยาวขึ้น

#Import timeit module
import timeit

# Use semicolon for multiple statements.
print(timeit.repeat("x = 2; x *= 2", number=100000000))
print(timeit.repeat("x = 1; x *= 4", number=100000000))

ผลลัพธ์

[24.859605879029118, 23.58795536845994, 23.95826726353284]
[22.70639977603264, 21.380195994245724, 20.71523588130414]

ใช้ Methods ตั้งค่าในโมดูล Timeit:

เราสามารถใช้เมธอดแบบกำหนดเองใน timeit โดยระบุอาร์กิวเมนต์การตั้งค่า ในอาร์กิวเมนต์นี้ เราระบุคำสั่งนำเข้าที่ระบุวิธีการที่เราเรียกใช้

#Import timeit module
import timeit

def func1():
   return 1

def func2():
   return sum([-1, 0, 1, 1])

# Test methods.
print(func1())
print(func2())

# Pass setup argument to call methods.
print(timeit.repeat("func1()", setup="from __main__ import func1"))
print(timeit.repeat("func2()", setup="from __main__ import func2"))

ในโปรแกรมด้านบน เราเปรียบเทียบเมธอด func1() กับเมธอด func2()

ผลลัพธ์

1
1
[0.44798489246658874, 0.4411512652046069, 0.44570416580426686]
[1.583622557983199, 1.5712399227517881, 1.5469479030713984]

เนื่องจาก func1() ทำงานน้อยลง ทำงานเร็วขึ้นมาก

สรุป

ด้านบน เราเห็นวิธีที่เราสามารถวัดประสิทธิภาพของโค้ด python ชิ้นเล็กๆ โดยใช้โมดูล timeit โดยใช้ CLI และสคริปต์ได้เช่นกัน