Sự thật về celery là gì

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

Sau khi được nhắc nhở về việc chuyển sang sử dụng hàng đợi thay bởi vì để các service thao tác trực tiếp với database, mình có dành thời gian tìm hiểu thêm về phong cách thiết kế Queue. Do dự án chạy hầu hết bằng python phải tech lead nhắc nhở sử dụng Celery, một hệ thống làm chủ queue phổ biến.




Bạn đang xem: Sự thật về celery là gì

Kiến trúc sau khoản thời gian chuyển sang thực hiện 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 phong cách thiết kế queue là message queue phần nhiều người trọn vẹn có thể đọc thêm ở toidicodedao

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


Application

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

Tasks

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

Tạo task

Để tạo nên task họ dùng decorator app.task(name=”create_new_user”)def create_user(username, password):User.objects.create(username=username, password=password)Để task rất có thể retry bạn có thể bound task vào thiết yếu instance của nó


task ( bind = True ) def địa chỉ cửa hàng ( self, x, y ) : logger.info ( self.request.id ) Task cũng 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 thông tin và trạng thái của task bạn cũng có thể sử dụng Task.request

Gọi task

Celery đáp ứng những API để hotline task sau thời điểm đã định nghĩa chúng ở trên .




Xem thêm: Kết Quả Soi Tươi Là Gì ? Soi Tươi Cổ Tử Cung Là Gì

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 luôn bởi process bây giờ .Có một task như sau :app.taskdef showroom ( x, y ) : return x + yĐể gọi task này tất cả chúng ta sẽ thử dùng 2 method là apply_async và delayVới delay vớ cả chúng ta sẽ viết như sau :# task.delay ( arg1, arg2, kwarg1 = ” x ”, kwarg2 = ” y ” ) add.delay ( 10, 5 ) add.delay ( a = 10, b = 5 ) dùng apply_async thì đề xuất viết phức hợp hơn một chú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 tế delay với apply_async là tương đồng nhưng delay đã tất cả sẵn những thiết lập mặc định cùng tất cả họ chỉ hoàn toàn hoàn toàn có thể truyền vào hồ hết tham số nên đã khái niệm trong function của task, còn cùng với apply_async vớ cả bọn họ hoàn toàn có thể truyền thêm các tham số khác như queue tất cả họ muốn gởi message vào, …. Best practice là nên áp dụng apply_async nhằm tiện bài toán config chạy task tùy theo yêu cầu sử dụng .Celery tương trợ việc call task theo dạng chaining, kết quả của task này trả toàn rất có thể được truyền vào task tiếp theo

add.apply_async((2, 2), link=add.s(16)) # 20Nhờ vào nguyên tắc này chúng ta có thể thiết kế callback mang lại 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 cân xứng với dự án Bất Động Sản. Như đã nói ở trên Celery tương hỗ 3 các loại message broker là RabbitMQ, Redis, SQS. Mình đang đi sâu vào phân tích và so với từng một số loại message broker vào 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: Từ Điển Anh Việt " Red Meat Là Gì ? Red Meat Thành Ngữ, Tục Ngữ, Slang Phrases

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 ″ # các mục of modules khổng lồ import when the Celery worker starts.imports = ( “ myapp.tasks ”, ) # # Using the database to lớn store task state and results. Result_backend = “ db + sqlite : / / / results.db ” task_annotations = “ tasks.add ” : “ rate_limit ” : “ 10 / s ” Best practice : sản xuất một file config riêng mang đế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 cho tới queue hy vọng muốnNgoài giải pháp tạo tệp tin config trên ra vớ cả họ cũng trả 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 trường đoản cú module thực hiện trực tiếp như saufrom celery Import Celeryapp = Celery ( “ name of module ”, broker = ” url_of_broker ” ) Worker cùng client của Celery hoàn toàn rất có thể tự retryMột process của Celery hoàn toàn hoàn toàn có thể giải quyết và xử trí hàng triệu task vào một phút cùng với độ trễ chỉ vài miligiây

Celery hỗ trợ:


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