การประมวลผลแบบอะซิงโครนัสใน Python

การประมวลผลแบบอะซิงโครนัสใน 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 ด้วย

YouTube Video