Xử lý bất đồng bộ trong Python
Bài viết này giải thích về xử lý bất đồng bộ trong Python.
Bạn có thể học các ví dụ mã về cách sử dụng cơ bản của async/await và mô-đun asyncio trong Python.
YouTube Video
Xử lý bất đồng bộ trong Python
Xử lý bất đồng bộ trong Python là một cơ chế để xử lý hiệu quả các thao tác I/O tốn nhiều thời gian, chẳng hạn như đọc và ghi tệp hoặc giao tiếp mạng. Trong xử lý đồng bộ, thao tác tiếp theo phải chờ cho đến khi thao tác hiện tại hoàn thành; nhưng với xử lý bất đồng bộ, bạn có thể thực hiện các tác vụ khác trong thời gian chờ đợi. Trong Python, mô-đun asyncio được cung cấp để thực hiện xử lý bất đồng bộ. Tại đây, chúng tôi sẽ giải thích các yếu tố cơ bản và cách sử dụng chúng từng bước.
Cú pháp Cơ bản
Cốt lõi của xử lý bất đồng bộ là các hàm được gọi là coroutine. Các hàm async định nghĩa các hàm bất đồng bộ, và await được sử dụng để chờ đợi một tác vụ bất đồng bộ trong các hàm đó.
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())- Trong mã trên, hàm
say_hellođược định nghĩa là một tác vụ bất đồng bộ. Trong khi chờ 1 giây vớisleep(), các tác vụ bất đồng bộ khác có thể được thực thi.
Thực hiện nhiều tác vụ
Bằng cách sử dụng hàm gather của mô-đun asyncio, bạn có thể chạy nhiều tác vụ cùng lúc.
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())- Trong ví dụ này,
task1vàtask2được thực thi đồng thời. Kết quả là,task2hoàn thành trước trong hai tác vụ, nhưng tổng thời gian thực thi bằng thời gian của tác vụ dài nhất.
Xử lý lỗi
Xử lý lỗi cũng rất quan trọng ngay cả trong xử lý bất đồng bộ. Bạn có thể bắt và xử lý lỗi bằng cách sử dụng cú pháp chuẩn 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())- Đoạn mã này minh họa cách các ngoại lệ xảy ra bên trong các hàm bất đồng bộ có thể được bắt bằng
try-exceptvà xử lý thông báo lỗi một cách an toàn. Ngoại lệ từfaulty_taskđược bắt bên trongmainvà được xuất ra một cách thích hợp.
Tóm tắt
Xử lý bất đồng bộ trong Python sử dụng async / await và asyncio để thực hiện các tác vụ khác đồng thời trong khi chờ I/O, giúp xử lý hiệu quả hơn. Bằng cách tận dụng việc thực thi đồng thời nhiều tác vụ và I/O bất đồng bộ, bạn có thể cải thiện hiệu suất đáng kể. Ngoài ra, vì bạn có thể xử lý lỗi giống như với try-except thông thường, nên bạn có thể chạy mã bất đồng bộ một cách an toàn.
Bạn có thể làm theo bài viết trên bằng cách sử dụng Visual Studio Code trên kênh YouTube của chúng tôi. Vui lòng ghé thăm kênh YouTube.