У меня есть файл csv с данными отслеживания для большого количества пользователей, которые мне нужно обобщить и превратить в отчет для каждого человека.
Я использую pandas и после некоторой предварительной обработки суммирую данные для каждого пользователя, используя цикл:
for u in users_active_week1:
user_week1 = week1[week1['UserId'] == u].reset_index(drop=True)
user_week2 = week2[week2['UserId'] == u].reset_index(drop=True)
....
....
Затем данные передаются Jinja для создания строки html для каждого пользователя с использованием шаблона. Здесь нет проблем.
# render html
env = Environment(loader=FileSystemLoader('.'), extensions=['jinja2.ext.i18n'])
t = env.get_template('static/weeklyreport_template.html')
html_out = t.render(vars)
out_pdf = ("{}{}{}{}{}".format('out_pdf/TimeUsePlusReport-',week0date_str,'-', user_email, '.pdf'))
Строка html (или файл не имеет значения) затем передается в weasyprint для создания pdf:
#make pdf
def makepdf(html):
htmldoc = HTML(string=html, base_url="", encoding='UTF-8')
return htmldoc.write_pdf(out_pdf, presentational_hints=True)
makepdf(html_out)
print("PDF-Report {}".format(user_email))
Каждый цикл создает около 6 идеально обработанных PDF-файлов, но затем останавливается, отмечая
Процесс завершен с кодом выхода -1073741819 (0xC0000005) в PyCharm или
Перезапуск ядра... в Spyder
Как это связано с нарушением прав доступа 0xC0000005?
Цикл работает без проблем при исключении части makepdf. Использование виртуальной среды не решает проблему. Если я изменяю порядок обработки данных разных пользователей, проблема повторяется, поэтому я предполагаю, что она не связана с конфликтами кодировки или формата данных. В моей системе не наблюдается заметной нехватки памяти. Добавление оператора sleep в цикл не меняет проблему. В фактически визуализированных PDF-файлах проблем с графикой не возникает. Weasyprint использует части библиотеки GTK+, установленной в моей системе вне Python.
Я благодарен за любой вклад в этот несколько туманный вопрос!