如何链芹菜任务

问题描述:

我想用STANDARD方式链接芹菜任务。如何链芹菜任务

我有一个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也是芹菜任务,然后这是由getrsslinks返回也应该是另芹菜任务URL列表报废。

它遵循这个模式

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) 

等..

我怎样才能做到这一点?

看看芹菜的subtask options。在你的病例组中应该有所帮助。您只需在getrsslinks内拨打scrape_link组。

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_asynclink_error