2011-06-30 40 views
5

Tôi có một nhiệm vụ phụ huynh sẽ sinh ra một số nhiệm vụ tùy ý và có khả năng lớn. Khi cả phụ huynh và tất cả các nhiệm vụ phụ đã hoàn thành, tôi cần đặt cờ trong cơ sở dữ liệu của mình để cho biết rằng nó đã sẵn sàng. Làm thế nào tốt nhất tôi nên làm điều đó?Phát hiện khi nào một nhiệm vụ cần tây và tất cả các nhiệm vụ phụ đã hoàn thành

Ví dụ:

@task() 
def master_task(foo): 
    foo_obj = Foo.objects.get(id=foo) 
    for bar in foo_obj.bar_set.all(): 
     more_work.delay(bar.id) 

@task() 
def more_work(bar): 
    bar_obj = Bar.objects.get(id=bar) 
    do_work() 

tôi cần phải phát hiện khi master_task và tất cả các nhiệm vụ con nó có đẻ đã hoàn thành để tôi có thể thiết lập một lá cờ trên một mô hình có liên quan để chỉ ra rằng tất cả mọi thứ đã sẵn sàng

Trả lời

4

sử dụng chords

Bạn nên sử dụng một [TaskSet] [1]: > các TaskSet cho phép gọi trình đơn giản của một số nhiệm vụ cùng một lúc, và sau đó có thể tham gia các kết quả trong thứ tự như các nhiệm vụ được gọi.
+0

Lưu ý rằng "TaskSet đã bị xóa, vì nó đã được thay thế bằng nhóm xây dựng trong Celery 3.0." – np8

2

celery.chord được thiết kế chính xác cho điều đó.

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