2012-10-22 32 views
10

Tôi có một tập lệnh nhỏ cho phép thực hiện các tác vụ để xử lý. Kịch bản này tạo ra rất nhiều truy vấn cơ sở dữ liệu để có được các mục cần được enqueued. Vấn đề tôi đang phải đối mặt là công nhân cần tây bắt đầu nhặt các nhiệm vụ ngay sau khi được kịch bản chấp nhận. Điều này là đúng và đó là cách cần tây làm việc nhưng điều này thường dẫn đến deadlocks giữa kịch bản của tôi và công nhân cần tây.Làm cách nào để trì hoãn việc thực thi các tác vụ Celery?

Có cách nào tôi có thể enqueue tất cả các nhiệm vụ của tôi từ kịch bản nhưng trì hoãn thực hiện cho đến khi kịch bản đã hoàn thành hoặc cho đến khi một thời gian cố định chậm trễ?

Tôi không thể tìm thấy điều này trong tài liệu về cần tây hoặc cần tây. Điều này có thể không?

Hiện tại, tôi đã nghĩ đến việc thêm tất cả các mục cần xử lý vào danh sách và khi tập lệnh của tôi được thực hiện tất cả các truy vấn, tôi có thể lặp lại danh sách và thực hiện các tác vụ. Có lẽ điều này sẽ giải quyết vấn đề nhưng khi bạn có hàng ngàn mặt hàng để enqueue, điều này có thể là một ý tưởng tồi.

Trả lời

1

Tôi nghĩ rằng bạn đang cố gắng để tránh tình trạng chủng tộc của các kịch bản của riêng mình, không đòi hỏi một phương pháp để trì hoãn một chạy nhiệm vụ.

Sau đó, bạn có thể tạo một tác vụ và trong tác vụ đó, hãy gọi từng tác vụ của bạn bằng .apply(), không phải .apply_async() hoặc .delay(). Để các tác vụ này chạy tuần tự

Các vấn đề liên quan