tl; dr: Không có Celerybeat không phù hợp với trường hợp sử dụng của bạn. Bạn phải chạy chỉ một quá trình celerybeat
, nếu không công việc của bạn sẽ bị trùng lặp.
Tôi biết đây là câu hỏi rất cũ. Tôi sẽ cố gắng để làm một bản tóm tắt nhỏ bởi vì tôi có cùng một vấn đề/câu hỏi (trong năm 2018).
Một số nền: Chúng tôi đang chạy ứng dụng Django (có cần tây) trong cụm Kubernetes. Cụm (trường hợp EC2) và Pod (~ containers) được tự động lấy mẫu: chỉ cần nói, tôi không biết khi nào và bao nhiêu phiên bản của ứng dụng đang chạy.
Trách nhiệm của bạn là chỉ chạy một quy trình của celerybeat
, nếu không, nhiệm vụ của bạn sẽ bị trùng lặp. [1] Có yêu cầu tính năng này trong kho Cần tây: [2]
Yêu cầu người sử dụng để đảm bảo rằng chỉ có một thể hiện của celerybeat tồn tại trên cụm của họ tạo ra một thực hiện đáng kể gánh nặng (hoặc tạo ra một điểm độc lập hoặc khuyến khích người dùng để cuộn mutex được phân phối của riêng họ).
celerybeat phải cung cấp cơ chế ngăn chặn vô tình đồng thời hoặc tài liệu nên đề xuất phương pháp hay nhất .
Sau một thời gian, yêu cầu tính năng này đã bị tác giả của Celery từ chối vì thiếu tài nguyên. [3] I khuyên bạn nên đọc toàn bộ chuỗi trên Github. Mọi người có khuyên các dự án/giải pháp:
Tôi không thử bất cứ điều gì từ trên (Tôi không muốn một sự phụ thuộc vào ứng dụng của tôi và tôi không thích các tác vụ khóa/bạn cần xử lý lỗi không thành công, v.v.).
Tôi đã sử dụng CronJob ở Kubernetes (https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/).
[1]celerybeat - multiple instances & monitoring
[2]https://github.com/celery/celery/issues/251
[3]https://github.com/celery/celery/issues/251#issuecomment-228214951
Tôi hiểu rằng, những gì tôi muốn là để có thể chạy nhiều trường celerybeat, vì vậy tôi có thể tránh được rủi ro nếu máy chủ chạy celerybeat sẽ ngừng hoạt động theo lịch trình. I E. một bộ lập lịch nhóm. –
Ok thì câu trả lời là không. Xem https://github.com/ask/celery/issues/251 –
Ok cảm ơn. Quá tệ nó chưa bao giờ làm nó thành 2.3 ... –