2015-02-05 151 views
0

我想用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) 

等..

我怎樣才能做到這一點?

回答

1

看看芹菜的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