การประมวลผลแบบอะซิงโครนัสใน Python
บทความนี้อธิบายเกี่ยวกับการประมวลผลแบบอะซิงโครนัสใน Python
คุณสามารถเรียนรู้ตัวอย่างโค้ดสำหรับการใช้งานพื้นฐานของ async/await และโมดูล asyncio ใน Python
YouTube Video
การประมวลผลแบบอะซิงโครนัสใน Python
การประมวลผลแบบอะซิงโครนัสในภาษา Python เป็นกลไกสำหรับจัดการกับการดำเนินการ I/O ที่ใช้เวลานาน เช่น การอ่านและเขียนไฟล์หรือการสื่อสารผ่านเครือข่ายอย่างมีประสิทธิภาพ ในการประมวลผลแบบซิงโครนัส การดำเนินการถัดไปจะรอจนกว่ากระบวนการปัจจุบันจะเสร็จ แต่ในการประมวลผลแบบอะซิงโครนัส คุณสามารถดำเนินการงานอื่น ๆ ระหว่างรอได้ ในภาษา Python มีโมดูล asyncio สำหรับการดำเนินการแบบอะซิงโครนัส ที่นี่ เราจะอธิบายองค์ประกอบพื้นฐานและวิธีการใช้งานทีละขั้นตอน
ไวยกรณ์พื้นฐาน
แกนหลักของการประมวลผลแบบอะซิงโครนัสคือฟังก์ชันที่เรียกว่า คอร์รูทีน (coroutines) ฟังก์ชัน async ใช้สำหรับนิยามฟังก์ชันแบบอะซิงโครนัส ส่วน await ใช้เพื่อรอการทำงานของงานแบบอะซิงโครนัสภายในฟังก์ชันเหล่านั้น
1import asyncio
2
3async def say_hello():
4 print("Hello")
5 await asyncio.sleep(1)
6 print("World")
7
8if __name__ == "__main__":
9 # Execute asynchronous task
10 asyncio.run(say_hello())- ในโค้ดด้านบน ฟังก์ชัน
say_helloถูกนิยามให้เป็นงานแบบอะซิงโครนัส ในขณะที่รอ 1 วินาทีด้วยsleep()งานแบบอะซิงโครนัสอื่น ๆ อาจถูกดำเนินการ
การทำงานหลายงานพร้อมกัน
โดยการใช้ฟังก์ชัน gather ของโมดูล asyncio คุณสามารถรันงานหลายงานพร้อมกันได้
1import asyncio
2
3async def task1():
4 print("Task 1 started")
5 await asyncio.sleep(2)
6 print("Task 1 completed")
7
8async def task2():
9 print("Task 2 started")
10 await asyncio.sleep(1)
11 print("Task 2 completed")
12
13async def main():
14 await asyncio.gather(task1(), task2())
15
16if __name__ == "__main__":
17 asyncio.run(main())- ในตัวอย่างนี้
task1และtask2ทำงานพร้อมกัน ผลลัพธ์คือtask2เสร็จเร็วกว่าหนึ่งในสองงาน แต่เวลารวมของการประมวลผลเท่ากับเวลาที่ใช้ในการประมวลผลงานที่นานที่สุด
การจัดการข้อผิดพลาด
การจัดการข้อผิดพลาดเป็นสิ่งสำคัญแม้ในการประมวลผลแบบอะซิงโครนัส คุณสามารถดักจับและจัดการข้อผิดพลาดด้วยไวยากรณ์ try-except มาตรฐาน
1import asyncio
2
3async def faulty_task():
4 raise Exception("An error occurred")
5
6async def main():
7 try:
8 await faulty_task()
9 except Exception as e:
10 print(f"Caught an error: {e}")
11
12if __name__ == "__main__":
13 asyncio.run(main())- โค้ดนี้แสดงให้เห็นว่าสามารถดักจับข้อผิดพลาดที่เกิดขึ้นภายในฟังก์ชันแบบอะซิงโครนัสด้วย
try-exceptและจัดการข้อความผิดพลาดได้อย่างปลอดภัย ข้อผิดพลาดจากfaulty_taskถูกดักจับภายในmainและส่งออกข้อมูลได้อย่างเหมาะสม
สรุป
การประมวลผลแบบอะซิงโครนัสใน Python ใช้ async / await และ asyncio เพื่อดำเนินการงานอื่น ๆ ไปพร้อมกันขณะรอ I/O ทำให้สามารถประมวลผลได้อย่างมีประสิทธิภาพ โดยการใช้การประมวลผลพร้อมกันของหลายงานและ I/O แบบอะซิงโครนัส คุณสามารถปรับปรุงประสิทธิภาพได้อย่างมาก นอกจากนี้ เนื่องจากคุณสามารถจัดการข้อผิดพลาดได้เหมือนกับ try-except ทั่วไป คุณจึงสามารถเรียกใช้โค้ดแบบอะซิงโครนัสได้อย่างปลอดภัย
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย