- vừa được xem lúc

Python Guru Series 🐍🐍🐍 - Part 6: Lập trình và quản lý task vụ bất đồng bộ với Celery

0 0 1

Người đăng: PhanDC

Theo Viblo Asia

Xin chào các bạn, tiếp nối chủ đề lập trình bất đồng bộ trong Python.
Trong part 6 của serie ngày hôm nay, mình xin được giới thiệu tới mọi người về Celery.
Một thư viện mạnh mẽ được sử dụng để quản lý, chạy các tác vụ bất đồng bộ và hàng đợi tin nhắn trong ứng dụng Python.
Ok mình cùng bắt đầu thôi.

1. Tổng quan về Celery

Khi phát triển các ứng dụng Python web, phần lớn thời gian chúng ta sẽ xử lý với các vụ yêu cầu kết quả ngay lập tức (các task vụ đồng bộ). Chẳng hạn như tìm thông tin mà cô gái mà bạn thích, số dư tài khoản ngân hàng, etc. Bên cạnh đó cũng có rất nhiều task vụ không cần yêu cầu trả về kết quả ngay, đây là các task vụ bất đồng bộ (asynchronous task) ví dụ như gửi email thông báo tới người dùng, export file, etc.

Đối với các task vụ bất đồng bộ thế này, người dùng không cần thiết phải đợi tới khi task vụ đó hoàn thành. Ý tưởng để giải quyết bài toán này đó là chúng ta sẽ đưa ra một nơi khác để thực thi nhằm tránh block luồng chính, tăng khả năng đáp ứng của ứng dụng.

Ở các task vụ đơn giản để cải thiện hiệu suất chúng ta có thể đưa task vụ đó ra backgroud thread để xử lý. Nhưng nếu số lượng requests nhiều và lỗi xảy ra trong quá trình thực thi task thì làm sao để quản lý hiệu quả. Tệ hơn là bạn có thể sẽ chịu ảnh hưởng GIL (Global Interpreter Lock) chỉ cho phép 1 thread thực thi tại một thời điểm.

Một giải pháp thay thế là sử dụng task queue để cung cấp khả năng xử lý độc lập với server. Lúc này cũng chính là lúc Celery bước vào cuộc chơi . Celery thường được sử dụng cho các tác vụ có async không yêu cầu kết quả ngay lập tức hoặc được sử để chạy các tác vụ định kỳ (scheduled tasks).

Minh họa một hệ thống FastAPI sử dụng Celery để quản lý task queue với Redis đóng vai trò là message broker và là nơi store backend result.

2. Tính năng chính

  • Xử lý tác vụ bất đồng bộ: Celery cho phép thực hiện các tác vụ mà không cần chờ đợi chúng hoàn thành, giúp cải thiện hiệu suất của ứng dụng.
  • Hàng đợi tác vụ: Celery quản lý các hàng đợi tin nhắn (message queue) và điều phối việc thực thi các tác vụ cho các worker từ các hàng đợi này.
  • Scheduled tasks: Celery hỗ trợ chạy các tác vụ định kỳ, tương tự như cron jobs. Với Celery Beat bạn có thể lập lịch cho task vụ chạy định kỳ trong một khoảng thời gian xác định. Chẳng hạn như tự động gửi tin nhắn chúc ngủ ngon cho người thương lúc 10 pm tối.
  • Khả năng mở rộng: Celery có thể mở rộng dễ dàng mở rộng theo chiều ngang bằng cách tăng số lượng worker để xử lý các tác vụ song song.
  • Retry và quản lý lỗi: Khi một tác vụ thất bại, Celery có khả năng tự động retry tác vụ đó hoặc retry theo như cấu hình được chỉ định.

3. Cấu trúc chính của Celery

  • Workers: Đây là các process chịu trách nhiệm lấy và thực thi các tác vụ từ hàng đợi.
  • Broker: Đứng giữa ứng dụng và worker là các message broker. Thành phần chịu trách nhiệm quản lý hàng đợi tin nhắn (message queue). Các broker phổ biến nhất được sử dụng là Redis hoặc RabbitMQ, Amazon SQS. Celery sử dụng các broker này để gửi các tác vụ đến worker xử lý.
  • Task: Đơn vị thực thi công việc trong Celery được gọi là task. Task sẽ được các phân phối vào các worker để xử lý.
  • Backend Result: Nơi được sử dụng để lưu trữ kết quả của các task khi hoàn thành trong các Database như Redis, Postgres, etc.

Celery là hệ thống quản lý task vụ phổ biến trong Python. Dễ dàng tích hợp với các web framework như Django, Flask, FastAPI để tạo ra một ứng dụng web hiệu năng cao. Ngoài ra, chúng ta có thể sử dụng Flower một công cụ để giám sát và quản lý các worker, task vụ Celery một cách trực quan qua giao diện web.

4. Tổng kết

Trên đây là phần giới thiệu tổng quan nhất về Celery và những ứng dụng của nó trong phát triển các ứng dụng bất đồng bộ trong Python.

Hi vọng bạn đọc sẽ nhận được các thông tin hữu ích.

Again, mình là Phan một chàng developer tò mò và tận tâm.

Hẹn gặp các bạn trong những bài viết sắp tới.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hiệp phương sai và hệ số tương quan tuyến tính trong Python

Giới thiệu. Làm việc với các biến trong phân tích dữ liệu luôn đặt ra câu hỏi: Các biến phụ thuộc, liên kết và thay đổi với nhau như thế nào? Các biện pháp hiệp phương sai và hệ số tương quan tuyến tính giúp thiết lập điều này.

0 0 63

- vừa được xem lúc

Không gian tên(namspace) và phạm vi(scope) trong Python

. Khi mình ngồi học và dịch bài "Class trong Python" cho sê-ri "Khám Phá Đại Bản Doanh Python", mình đã đụng hai bạn này, và các bạn thật là trừu tượng và khó gặm. Thế là mình tìm kiếm và viết bài này để hiểu rõ hơn về hai bạn ấy, hi vọng bạn đọc thêm để hiểu về Python nhé.

0 0 46

- vừa được xem lúc

Tản mạn một chút về kỹ thuật Streaming

Lời mở đầu. Hôm nay trong lúc rảnh rỗi tôi ngồi tìm hiểu kỹ thuật streaming và áp dụng nó bằng Python. Bài viết có thể có thiếu sót mong các bạn thông cảm. Stream là một kỹ thuật chuyển dữ liệu theo dòng ổn định và liên tục.

0 0 70

- vừa được xem lúc

Vì sao chọn FastAPI

Introduction. Gần đây, do nhu cầu phát triển theo mô hình microservice ngày càng phổ biến, mình chủ yếu code mảng Python - Backend nên được phép chọn một framework để phát triển project mới cho công ty, sau khi cân nhắc giữa 3 framework phổ biến hiện tại sử dụng Python là Django, Flask và FastAPI, m

0 0 40

- vừa được xem lúc

Introduction to Google Cloud AutoML Vision

With the rapid development of technology, a Data Scientist could achieve their job like training ML models faster. The Word "AutoML"(also known as Automated machine learning) comes and now plays a cru

0 0 63

- vừa được xem lúc

Telegram Bot - Cào Dữ Liệu Từ VnExpress Bằng Python

Chào mọi người, sau bao ngày với các bài viết về lỗi bảo mật thì hôm nay mình sẽ đổi gió tí nhỉ :v. Vì thế nên hôm nay mình sẽ hướng dẫn mọi người làm 1 con bot Telegram bằng Python nhé.

1 0 218