Мне нужно сгенерировать более 100 страниц PDF-документов. Процесс требует много данных для обработки, и все -в -один раз генерация занимает больше времени и памяти, чем я могу выделить.
Я испробовал несколько разных методов, чтобы взломать свой путь:
С переменным результатом у меня это заработало, но оно работает медленно и занимает больше памяти, чем должно (иногда достигает предела программной памяти экземпляра ). В настоящее время я создаю несколько разделов в разных задачах, сохраняя каждый в blobstore, и объединяю их с pyPdf, но он задыхается от больших документов.
Создаваемый мной документ не так уж и сложен, в основном таблицы и текст, без внутренних ссылок, без оглавления,нет ничего, что должно быть известно об остальной части документа. Я могу жить с утконосом для верстки, и мне не нужен причудливый вид документа или преобразование HTML2PDF.
Цель состоит в том, чтобы сгенерировать документ настолько быстро, насколько это позволит хранилище данных. Параллельная генерация страниц была бы хороша, но не обязательна.
Я думал о создании страницы -путем -генерации страниц с помощью blobstore files api , где каждая задача будет генерировать одну страницу, а последняя задача будет завершать файл blobstore, делая его читабельным. Но я не могу найти, как приостановить создание, сохранить частичный PDF-файл в поток и возобновить создание с этим потоком для создания следующей страницы в другой задаче.
Итак, мой вопрос::
Как в GAE создать PDF-документ объемом более нескольких страниц, разделив генерацию между запросами задач, а затем сохранить полученный документ в blobstore?
Если разделение поколений невозможно с помощью reportlab, то как минимизировать объем объединения различных PDF-документов, чтобы оно соответствовало ограничениям, установленным запросом задачи GAE?
ОБНОВЛЕНИЕ: Приветствуются альтернативы Conversion API.
2-е ОБНОВЛЕНИЕ Conversion API выводится из эксплуатации, поэтому сейчас это не вариант.
3-е ОБНОВЛЕНИЕ Могут ли здесь помочь API Pileline или MapReduce?