簡體   English   中英

如何鏈接芹菜任務

[英]how to chain celery tasks

我想以標准方式鏈接芹菜任務。

我有一個json文件。 在該文件中,有許多經過編碼的網址。 我需要取消這些鏈接,同時還要取消在查找這些鏈接時找到的鏈接。

目前,我正在這樣做。

for each_news_source, news_categories in rss_obj.iteritems():
    for each_category in news_categories:
        category = each_category['category']
        rss_link = each_category['feed']
        json_id = each_category['json']
        try:
            list_of_links = getrsslinks(rss_link)
            for link in list_of_links:
                scrape_link.delay(link, json_id, category)
        except Exception,e:
            print "Invalid url", str(e)

我想要getrsslinks也是一個celery任務,然后由getrsslinks返回的getrsslinks網址列表也應該是另一個celery任務。

它遵循這種模式

harcodeJSONURL1--
               --`getrsslinks` (celery task)
                               --scrap link 1 (celery task)
                               --scrap link 2 (celery task)
                               --scrap link 3 (celery task)
                               --scrap link 4 (celery task)

harcodeJSONURL2--
               --`getrsslinks` (celery task)
                               --scrap link 1 (celery task)
                               --scrap link 2 (celery task)
                               --scrap link 3 (celery task)
                               --scrap link 4 (celery task)

等等..

我怎樣才能做到這一點??

看一下Celery中的子任務選項 在您的情況下,小組應該有所幫助。 您只需要在scrape_link內調用scrape_linkgetrsslinks

from celery import group

@app.task
def getrsslinks(rsslink, json_id, category):
    # do processing

    # Call scrape links
    scrape_jobs = group(scrape_link.s(link, json_id, category) for link in link_list)
    scrape_jobs.apply_async()
    ...

您可能希望getrsslinks返回scrape_jobs以更輕松地監視作業。 然后在解析json文件時,您將像這樣調用getrsslinks

for each_news_source, news_categories in rss_obj.iteritems():
    for each_category in news_categories:
        category = each_category['category']
        rss_link = each_category['feed']
        json_id = each_category['json']
        getrsslinks.delay(rss_link, json_id, category)

最后,要監視哪些鏈接無效(自從我們替換了try / except塊以來),您需要存儲所有getrsslinks任務,並監視成功或失敗。 您可以apply_async使用apply_asynclink_error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM