1. Получаем список изображений из бд
2. Загружаем все изображения (параллельно)
3. Куда-то возвращаем список загруженных изображений и проводим операции с ними
У меня получился такой код:
@commit_on_success
@task(ignore_result=True)
def fetch_url(instance):
"""Получает содержимое"""
try:
page = urlopen(instance.photo_big, timeout=4)
except URLError:
pass
filename = md5(instance.photo_big).hexdigest()
image = ContentFile(page.read())
instance.localpath.save(filename, image)
#instance.save()
@task
def form_poster(poster):
"""Склеивает изображения"""
print('making poster!!! %s' % poster)
@task
def make_poster(poster):
"""Формирует постер"""
try:
photos = PosterPhoto.objects.filter(poster=poster, localpath='')
job = TaskSet(fetch_url.subtask(args=(photo,)) for photo in list(photos))
job.apply_async()
except ObjectDoesNotExist:
print('no photos exists for %s' % poster)