Trong cần tây, có cách đơn giản để tạo một (các) nhiệm vụ mà tôi có thể sử dụng để tự động khởi động lại một nhân viên không?Nhiệm vụ của Python Celery để khởi động lại công nhân cần tây
Mục đích là để việc triển khai của tôi tự động khởi động lại tất cả các công nhân cần tây non mỗi khi nó nhận được nguồn mới từ github. Vì vậy, sau đó tôi có thể gửi tác vụ restartWorkers() cho trường hợp cần quản lý của mình trên máy sẽ giết (thực sự dừng) tất cả các quy trình công nhân cần tây trên máy đó và khởi động lại chúng bằng các mô-đun mới.
Kế hoạch này là dành cho mỗi máy phải có:
- nút Quản lý [Queues: Quản lý, thiết bị riêng biệt] - Chịu trách nhiệm quản lý phần còn lại của những người lao động trên máy tính này, đưa lên các nút mới và giết cũ những người cần thiết
- Nút công nhân [Hàng đợi: cụ thể, sửa đổi, cụ thể cho người lao động, máy cụ thể] - Thực sự chịu trách nhiệm thực hiện công việc.
Có vẻ như mã tôi cần ở đâu đó trong dist_packages/celery/bin/celeryd_multi.py, nhưng nguồn này khá mờ đục khi bắt đầu công nhân và tôi không biết nó hoạt động như thế nào thực sự bắt đầu các nút. (Dường như shutdown_nodes là mã chính xác để kêu gọi giết chết các quy trình, và tôi đang từ từ gỡ lỗi theo cách của mình thông qua nó để tìm ra lý lẽ của tôi nên là gì)
Có chức năng/chức năng restart_nodes (tự, nút) một nơi nào đó mà tôi có thể gọi hoặc tôi sẽ chạy các kịch bản shell từ bên trong python?
/Ngoài ra, có cách nào đơn giản hơn để tải lại nguồn vào Python hơn là giết và khởi động lại quy trình không? Nếu tôi biết rằng tải lại mô-đun thực sự làm việc (Thử nghiệm nói rằng nó không. Thay đổi chức năng không percolate cho đến khi tôi khởi động lại quá trình), tôi chỉ làm điều đó thay vì indirection với các nút quản lý.
EDIT: Tôi hiện có thể tắt máy, nhờ phát sóng (Cảm ơn mihael. Nếu tôi có thêm đại diện, tôi sẽ upvote). Bất kỳ cách nào để phát lại một khởi động lại? Có pool_restart, nhưng điều đó không giết nút, có nghĩa là nó sẽ không cập nhật nguồn.
Tôi đã xem xét một số nguồn hậu trường trong celery.bin.celeryd: WorkerCommand(). Run(), nhưng có một số công cụ kỳ lạ xảy ra trước và sau cuộc gọi chạy, vì vậy tôi có thể ' t chỉ cần gọi chức năng đó và được thực hiện bởi vì nó bị treo. Nó chỉ làm cho 0 ý nghĩa để gọi một lệnh shell từ một kịch bản python để chạy một kịch bản python, và tôi không thể tin rằng tôi là người đầu tiên muốn làm điều này.
"Có pool_restart, nhưng điều đó không giết nút, có nghĩa là nó sẽ không cập nhật nguồn" - thực sự muốn bạn có một giải pháp cho điều này, nhưng có vẻ như nó vẫn chưa được giải quyết ở đây. – AlanSE
cách bạn xử lý công nhân của mình? bạn đang sử dụng systemd? bạn có thể có một nhiệm vụ execRestart và gọi systemctl khởi động lại celery.service ví dụ vào cuối triển khai – shalbafzadeh
Công ty đó đã đi dưới 4 năm trước, do đó, nó không quan trọng bây giờ và tôi quên. –