如何链芹菜任务
问题描述:
我想用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_async
和link_error
。