Работа с многопроцессорными задачами и задачами Celery
Я работаю над проектом веб-скрейпинга на Django. Цель - соскрести рекламные данные с 3 сайтов, создать каждое объявление как объект модели и перечислить их в представлении. У меня есть четыре функции скраппинга, для которых я использовал модуль мультипроцессинга, чтобы запустить их все одновременно. Все эти функции выполняются в этой функции:
@shared_task
def run():
ad_list = []
running_tasks = [Process(target=task, args=[ad_list]) for task in [scrape_lento_flats, scrape_lento_houses, scrape_morizon, scrape_gethome]]
for running_task in running_tasks:
running_task.start()
for running_task in running_tasks:
running_task.join()
return save(ad_list)
и затем результат сохраняется:
@shared_task(serializer='json')
def save(ad_list):
for ad in ad_list:
location = Location.save(
name = ad['location']
)
type = OfferType.save(
id = OfferType.types[0] if ad['type'] == 'for sale' else OfferType.types[1]
)
category = Category.save(
name = ad['type']
)
Advertisement.objects.create(
title = ad['title'],
description = ad['description'],
price = ad['price'],
source = ad['source'],
url = ad['source_url'],
location = location,
type = type,
category = category,
photo_url = ad['photo_url']
)
Все эти функции существуют в файле tasks.py, аннотированные с помощью Celery's shared_task (за исключением двух util, которые просто "полируют" соскобленные данные). Я следовал руководству из https://codeburst.io/making-a-web-scraping-application-with-python-celery-and-django-23162397c0b6, однако я не понимаю, как Celery узнает, какая задача должна быть запущена первой? Как он узнает, какая задача является частью другой? Сталкиваются ли между собой многопроцессорные задачи и задачи Celery? Я хотел бы понять это, потому что при выполнении этого проекта не создается никаких объектов.