Celery là gì

     
Review Celery Là Gì – Nghĩa Của từ bỏ Celery Trong tiếng Việt là conpect trong văn bản ngày từ bây giờ của bọn chúng tôi. Theo dõi văn bản để biết rất rất đầy đủ nhé .Trong dự án Bất Động Sản hiện tại tại của mình khi cho tới phần scaling mạng lưới khối hệ thống thì bản vẽ xây dựng hiện tại theo phía microservice chạm mặt phải một yếu tố : hầu hết service trong mạng lưới hệ thống đều hệ trọng trực tiếp với database nên xảy ra yếu tố càng các service thì sẽ càng nhiều liên kết tới database dẫn đến hoàn cảnh xảy ra deadlock, performance cũng rất chậm bởi những links tới database từ phần đông service cần chờ nhau hóa giải .Bạn sẽ xem : Celery là gì

Sau khi được nhắc nhở về việc chuyển sang cần sử dụng hàng ngóng thay bởi để những service thao tác làm việc trực tiếp cùng với database, mình có dành thời gian tham khảo thêm về phong cách xây dựng Queue. Do dự án công trình chạy đa phần bằng python nên tech lead gợi nhắc sử dụng Celery, một hệ thống cai quản queue phổ biến.




Bạn đang xem: Celery là gì

Kiến trúc sau thời điểm chuyển sang sử dụng queue trong mạng lưới hệ thống của mình sẽ như sau. Một bài viết khá chi tiết cụ thể về một dạng thiết kế queue là message queue phần đa người hoàn toàn có thể tham khảo thêm ở toidicodedao

*
Về CeleryLà một mạng lưới khối hệ thống quản trị sản phẩm đợi giải quyết và xử lý và cách xử lý task thời hạn thực. Vào mạng lưới hệ thống Celery tất cả họ sẽ thực hiện khái niệm task hệt như job ở một số trong những ít framework khác như Sidekiq. đầu vào của celery cần link với một một số loại message broker còn output đầu ra hoàn toàn có thể liên kết tới một mạng lưới hệ thống backend nhằm tàng trữ hiệu quảMọi người trọn vẹn có thể xem thêm một bài viết khác về Celery bên trên viblo sinh hoạt đây. Trong khi Celery cũng có thể có một mạng lưới khối hệ thống document ví dụ và đọc dễ dàng ở trang chủ https://docs.celeryproject.org/en/latest/getting-started/introduction.html .Các việc nên áp dụng CeleryChạy background jobsChạy rất nhiều job lập lịchTính toán phân tánXử lý mặc dù songCác công dụng chính Celery cung cấpMonitor : giám sát những job / task được gửi vào queueScheduling : chạy mọi task lập lịch ( giống như cronjob ) Workflows : tạo ra một luồng giải quyết và xử lý và cách xử lý taskTime và Rate Limits : trấn áp con số task được tiến hành trong một khoảng tầm chừng thời hạn, thời hạn một task được chạy, … Resource Leak Protection : trấn áp khoáng sản trong quy trình giải quyết và cách xử trí taskUser Component : được chất nhận được người cần sử dụng tự customize phần đa worker. Nguyên tắc của CeleryCelery chuyển động giải trí dựa trên khái niệm task queue. Đây là chính sách queue dùng để làm điều phối hồ hết job / work giữa những máy khác nhau. Những worker đã nhận task, chạy task cùng trả về hiệu quả. đầu vào của queue : TaskCác process trên từng worker sẽ theo dõi queue để triển khai những task mới được đẩy vào queueCelery thường được sử dụng một message broker để điều phối task trong những clients với worker. Để sản xuất một task new client sẽ thêm một message vào queue, broker kế tiếp sẽ chuyển message này cho tới worker. Celery tương trợ 3 nhiều loại broker : RabbitMQRedisSQSMột mạng lưới hệ thống sử dụng celery hoàn toàn có thể có không ít workers cùng brokers, nhờ vậy câu hỏi scale theo chiều ngang sẽ khá thuận tiện. Những module chính của Celery


Application

Một instance được khởi sinh sản từ tủ sách Celery được call là applicationNhiều Celery application trả toàn có thể cùng tồn tại trong một processKhởi tạo ra một celery application :from celery import Celeryapp = Celery ( ) Khi giữ hộ một message cho tới queue, message đó sẽ chỉ đựng tên của task cần tiến hành .Các celery worker sẽ map giữa tên của task với hàm triển khai task đó, việc mapping do đó được điện thoại tư vấn là task registryapp.taskdef địa chỉ ( x, y ) : return x + y

Tasks

Task vào Celery có hai trách nhiệm chính : định nghĩa phần nhiều gì vẫn xảy ra sau khoản thời gian một task được call ( gửi đi message ) định nghĩa hồ hết gì sẽ xẩy ra khi một worker nhận được message đóMỗi task gồm một tên riêng không trùng lặp, thương hiệu này sẽ tiến hành refer trong message để worker hoàn toàn hoàn toàn có thể tìm được đúng hàm nhằm thực thi. Nếu không định nghĩa tên mang lại task thì task đó sẽ được tự đặt tên nhờ vào module mà task được quan niệm và thương hiệu function của task. Các message của task sẽ không biến thành xóa ngoài queue chừng làm sao message đó chưa được một worker xử lý và xử lý. Một worker hoàn toàn có thể giải quyết và xử lý các message, nếu worker bị crash cơ mà chưa giải quyết và xử lý và xử lý hết đa số message kia thì bọn chúng vẫn hoàn toàn rất có thể được nhờ cất hộ lại cho tới một worker khácCác function của task đề nghị ở tâm trạng idempotent : function không gây ra tác động ảnh hưởng gì tất cả khi tất cả bị gọi các lần với 1 tham số => một task đã tiến hành sẽ đảm bảo an toàn không bị chạy lại đợt tiếp nhữa .

Tạo task

Để tạo thành task họ dùng decorator app.task(name=”create_new_user”)def create_user(username, password):User.objects.create(username=username, password=password)Để task hoàn toàn có thể retry chúng ta cũng có thể bound task vào chính instance của nó


task ( bind = True ) def add ( self, x, y ) : logger.info ( self.request.id ) Task cũng hoàn toàn hoàn toàn có thể thừa kế

import celeryclass MyTask(celery.Task):def on_failure(self, exc, task_id, args, kwargs, einfo): print(“0!r failed: 1!r”.format(task_id, exc))task(base=MyTask)def add(x, y):raise KeyError()Để biết thêm tin tức và tinh thần của task bạn có thể sử dụng Task.request

Gọi task

Celery cung ứng những API để call task sau thời điểm đã định nghĩa bọn chúng ở bên trên .




Xem thêm: Hiểu Đúng Về Nọng Là Gì ? Hiểu Thêm Văn Hóa Việt Cách Làm Giảm Nọng Cằm Nhanh Nhất, Hiệu Quả Nhất

apply_async : gởi task message.delay : nhờ cất hộ task messagecalling : task message sẽ không còn được gửi tiếp cận worker nhưng task sẽ được thực thi luôn bởi process lúc này .Có một task như sau :app.taskdef showroom ( x, y ) : return x + yĐể điện thoại tư vấn task này vớ cả bọn họ sẽ thử sử dụng 2 method là apply_async với delayVới delay vớ cả bọn họ sẽ viết như sau :# task.delay ( arg1, arg2, kwarg1 = ” x ”, kwarg2 = ” y ” ) add.delay ( 10, 5 ) add.delay ( a = 10, b = 5 ) sử dụng apply_async thì đề nghị viết phức tạp hơn một chút ít ít # task. Apply_async ( args =, kwargs = ” kwarg1 ″ : “ x ”, “ kwarg2 ” : “ y ” ) add. Apply_async ( queue = ” low_priority ”, args = ( 10, 5 ) ) add. Apply_async ( queue = ” high_priority ”, kwargs = ” a ” : 10, “ b ” : 5 ) Về thực chất delay cùng apply_async là hệt nhau nhưng delay đã gồm sẵn những thiết lập cấu hình mặc định với tất cả chúng ta chỉ trả toàn rất có thể truyền vào hầu như tham số đề nghị đã tư tưởng trong function của task, còn cùng với apply_async vớ cả chúng ta hoàn toàn rất có thể truyền thêm phần đa tham số khác ví như queue tất cả bọn họ muốn gửi message vào, …. Best practice là nên áp dụng apply_async để tiện câu hỏi config chạy task tùy theo yêu cầu sử dụng .Celery tương trợ việc gọi task theo mô hình chaining, tác dụng của task này hoàn toàn có thể được truyền vào task tiếp theo

add.apply_async((2, 2), link=add.s(16)) # 20Nhờ vào vẻ ngoài này bạn có thể thiết kế callback cho task như sauapp.taskdef error_handler(uuid):result = AsyncResult(uuid)exc = result.get(propagate=False)print(“Task 0 raised exception: 1!r2!r”.format( uuid, exc, result.traceback))add.apply_async((2, 2), link_error=error_handler.s())Sử dụng Celery


Cài đặt

pip install – U Celery

Sử dụng

Lựa chọn một số loại message broker tương hợp với dự án công trình Bất Động Sản. Như đã nói trên Celery cứu giúp 3 một số loại message broker là RabbitMQ, Redis, SQS. Mình vẫn đi sâu vào nghiên cứu và so với từng nhiều loại message broker trong phần sau về Celery .Tạo một celery worker với task add

from celery Import Celeryapp = Celery(“name of module”, broker=”url_of_broker”)app.taskdef add(x, y):return x + yChạy worker

USD celery – A tasks worker – loglevel = infoGọi task




Xem thêm: Những Loại Tinh Dầu Thơm Cho Trẻ Sơ Sinh Giúp Bé Ngủ Ngon, Giảm Đau Bụng

Lưu tác dụng

Cấu hình Celery

Cấu hình khoác định cơ phiên bản của celery :# # Broker settings. Broker_url = “ redis : / / localhost : 6379 / 0 ″ # danh sách of modules lớn import when the Celery worker starts.imports = ( “ myapp.tasks ”, ) # # Using the database khổng lồ store task state and results. Result_backend = “ db + sqlite : / / / results.db ” task_annotations = “ tasks.add ” : “ rate_limit ” : “ 10 / s ” Best practice : chế tạo một file config riêng đến celery celeryconfig.pybroker_url = “ redis : / / localhost : 6379 / 0 : / / ” result_backend = “ rpc : / / ” task_serializer = “ json ” result_serializer = “ json ” accept_content = timezone = “ Europe / Oslo ” enable_utc = Truetask_routes = “ tasks.add ” : “ low-priority ”, # routing một task tới queue ý muốn muốnNgoài giải pháp tạo tệp tin config trên ra vớ cả chúng ta cũng hoàn toàn rất có thể config trực tiếp bởi application của Celery app.confapp.conf.update ( enable_utc = True, timezone = ” Europe / London ”, ) Tổng kếtCelery không nhất thiết phải config các mà chỉ việc import từ module thực hiện trực tiếp như saufrom celery Import Celeryapp = Celery ( “ name of module ”, broker = ” url_of_broker ” ) Worker với client của Celery trả toàn hoàn toàn có thể tự retryMột process của Celery trả toàn hoàn toàn có thể giải quyết và cách xử lý hàng triệu task vào một phút với độ trễ chỉ vài ba miligiây

Celery hỗ trợ:


Message brokers : RabbitMQRedisSQSXử lý concurrencymultiprocessingmultithreadsingle threadeventlet, geventLưu trữ tác dụng trên đều mạng lưới hệ thống : AmqpRedisMemcachedSQLAlchemyAmazon S3File systemSerializationjsonyamlỞ phần sau nội dung bài viết mình đã đi sâu rộng về worker trong Celery với hai một số loại message broker mà Celery tương hỗ : SQS – Redis, đôi khi dựng một ứng dụng cơ bạn dạng sử dụng mạng lưới hệ thống này .Chuyên mục : Hỏi Đáp